以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 请教老师帮忙指导写一个sql语句 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99778) |
|||||||||||||||||||||
-- 作者:ltty5200 -- 发布时间:2017/4/26 16:52:00 -- [求助] 请教老师帮忙指导写一个sql语句 我的表有如下几列,我想用一个sql语句查询出每个店铺订单数量排名前50的数据,但是感觉好复杂,编不了这个语句,请老师帮忙编写一下,在此拜谢! 每个货号在不同的店铺有不同的订单数量,每个店铺也会有不同的货号以及该产品的订单数量。
|
|||||||||||||||||||||
-- 作者:菲舍尔 -- 发布时间:2017/4/26 17:30:00 -- se!ect top 50 sum(订单数量)as 订单总数,货号,店铺名称 from 表 group by 店铺名称,货号 order by 订单总数 DESC
|
|||||||||||||||||||||
-- 作者:有点色 -- 发布时间: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 -- 发布时间:2017/4/26 17:54:00 -- 谢谢回复,您的代码执行后只能查询出表里面订单数量为前50的数据,也就是只有50条数据。我需要的是每个店铺的订单数量为前50名的数据,该如何修改? |
|||||||||||||||||||||
-- 作者:ltty5200 -- 发布时间:2017/4/26 17:55:00 -- 老师,我执行您的代码后,半天没有任何反应,是不是哪里错了? |
|||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2017/4/26 18:06:00 -- 以下是引用ltty5200在2017/4/26 17:55:00的发言:
老师,我执行您的代码后,半天没有任何反应,是不是哪里错了?
是不是你的数据量太大?你做个有数据的例子上来看看,比如导入 1千行、1万行数据测试。 |
|||||||||||||||||||||
-- 作者:ltty5200 -- 发布时间:2017/4/26 18:40:00 -- 老师,是的,您的语句执行后达到要求了,可是执行速度太慢,而且程序还会卡死。大概差不多10分钟才查询出来的(只有1.8W行数据),能再给优化下吗? |
|||||||||||||||||||||
-- 作者:ltty5200 -- 发布时间:2017/4/26 18:49:00 -- 我把项目复制上来了。里面有1.85W行数据,麻烦老师优化下。目的是查询出每个店铺订单数量排名前50的数据。补充一下:每个货号只会在每个店铺出现一次,不会重复。谢谢!
|
|||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2017/4/26 19:14:00 -- 不要用sql语句来做,结合代码
Dim idx As String = "-1," |
|||||||||||||||||||||
-- 作者:ltty5200 -- 发布时间:2017/4/26 22:12:00 -- 谢谢老师耐心指导。但是如果不用表,非要用SQL查询的话有办法吗?求帮忙,尽量用sql,拜谢了。 |