Foxtable(狐表)用户栏目专家坐堂 → [求助] 请教老师帮忙指导写一个sql语句


  共有3142人关注过本帖树形打印复制链接

主题:[求助] 请教老师帮忙指导写一个sql语句

帅哥哟,离线,有人找我吗?
ltty5200
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
[求助] 请教老师帮忙指导写一个sql语句  发帖心情 Post By:2017/4/26 16:52:00 [只看该作者]

我的表有如下几列,我想用一个sql语句查询出每个店铺订单数量排名前50的数据,但是感觉好复杂,编不了这个语句,请老师帮忙编写一下,在此拜谢!
每个货号在不同的店铺有不同的订单数量,每个店铺也会有不同的货号以及该产品的订单数量。

货号 店铺名称 年份 季节 品名 订单数量 吊牌金额
32DC10227 (停)4易门店 2017 上衣 8 1584.00
32DC10239 (停)4易门店 2017 上衣 8 1584.00

 回到顶部
帅哥哟,离线,有人找我吗?
菲舍尔
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:509 积分:3547 威望:0 精华:3 注册:2012/11/13 15:49:00
  发帖心情 Post By:2017/4/26 17:30:00 [只看该作者]

se!ect top 50 sum(订单数量)as  订单总数,货号,店铺名称 from 表 group by 店铺名称,货号 order by 订单总数 DESC

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/26 17:41:00 [只看该作者]

参考代码,把红色代码替换成50即可

 

select a.* from (Select 店铺名称, 货号, sum(订单数量) as 总数量 from {表c} group by 店铺名称, 货号) as a where 1 > (select count(*) from (Select 店铺名称, 货号, sum(订单数量) as 总数量 from {表c} group by 店铺名称, 货号) as b where b.店铺名称 = a.店铺名称 and b.总数量 > a.总数量 ) order by a.店铺名称, a.总数量

[此贴子已经被作者于2017/4/26 17:42:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ltty5200
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/4/26 17:54:00 [只看该作者]

谢谢回复,您的代码执行后只能查询出表里面订单数量为前50的数据,也就是只有50条数据。我需要的是每个店铺的订单数量为前50名的数据,该如何修改?

 回到顶部
帅哥哟,离线,有人找我吗?
ltty5200
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/4/26 17:55:00 [只看该作者]

老师,我执行您的代码后,半天没有任何反应,是不是哪里错了?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/26 18:06:00 [只看该作者]

以下是引用ltty5200在2017/4/26 17:55:00的发言:
老师,我执行您的代码后,半天没有任何反应,是不是哪里错了?

 

是不是你的数据量太大?你做个有数据的例子上来看看,比如导入 1千行、1万行数据测试。


 回到顶部
帅哥哟,离线,有人找我吗?
ltty5200
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/4/26 18:40:00 [只看该作者]

老师,是的,您的语句执行后达到要求了,可是执行速度太慢,而且程序还会卡死。大概差不多10分钟才查询出来的(只有1.8W行数据),能再给优化下吗?

 回到顶部
帅哥哟,离线,有人找我吗?
ltty5200
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/4/26 18:49:00 [只看该作者]

我把项目复制上来了。里面有1.85W行数据,麻烦老师优化下。目的是查询出每个店铺订单数量排名前50的数据。补充一下:每个货号只会在个店铺出现一次,不会重复。谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目5.zip


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/26 19:14:00 [只看该作者]

 不要用sql语句来做,结合代码

 

Dim idx As String = "-1,"
Dim idx_temp As String = ""
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
Dim cs As String = "店铺名称"
For Each dr As DataRow In DataTables("表A").Select("", "店铺名称, 订单数量 desc")
    Dim flag As Boolean = False
    If pdr IsNot Nothing Then
        For Each c As String In cs.split(",")
            If pdr(c) <> dr(c) Then
                flag = True
                Exit For
            End If
        Next
    End If
    If flag Then
        idx &= idx_temp
        count = 1
        idx_temp = dr("_Identify") & ","
    Else
        count += 1
        If count <= 50 Then
            idx_temp &= dr("_Identify") & ","
        End If
    End If
   
    pdr = dr
Next
msgbox("查询完毕")
If count <= 50 Then
    idx &= idx_temp
End If
Tables("表A").filter = "_Identify in (" & idx.trim(",") & ")"
Tables("表A").sort = "店铺名称, 订单数量 desc"


 回到顶部
帅哥哟,离线,有人找我吗?
ltty5200
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/4/26 22:12:00 [只看该作者]

谢谢老师耐心指导。但是如果不用表,非要用SQL查询的话有办法吗?求帮忙,尽量用sql,拜谢了。

 回到顶部
总数 11 1 2 下一页