现有一个部门销售表如下
日期(年月日) 部门(100个) 销售量 销售物品(每个部门的物品数量不等,但都在100种以上)
2009-09-27 00 100 a1
2009-09-27 00 200 a2
……
2009-09-27 01 10 b1
2009-09-27 01 90 b2
……
……
2009-09-28 00 150 a1
2009-09-28 00 200 a2
……
2009-09-28 01 30 b1
2009-09-28 01 70 b2
……
需要一条语句,把每个部门每天销售量排在前100名的销售物品选出来我只能想出最简单的一种,就是写很多条语句,每条语句选出一天一个部门的销售top100。但那样太过麻烦,一年365天,就需要写三万多条语句,不太实际,请高手帮忙想想办法,能不能用group by之类的实现,谢谢
日期(年月日) 部门(100个) 销售量 销售物品(每个部门的物品数量不等,但都在100种以上)
2009-09-27 00 100 a1
2009-09-27 00 200 a2
……
2009-09-27 01 10 b1
2009-09-27 01 90 b2
……
……
2009-09-28 00 150 a1
2009-09-28 00 200 a2
……
2009-09-28 01 30 b1
2009-09-28 01 70 b2
……
需要一条语句,把每个部门每天销售量排在前100名的销售物品选出来我只能想出最简单的一种,就是写很多条语句,每条语句选出一天一个部门的销售top100。但那样太过麻烦,一年365天,就需要写三万多条语句,不太实际,请高手帮忙想想办法,能不能用group by之类的实现,谢谢
from 部门销售表 a
where 100>(select count(*) from 部门销售表 where 日期=a.日期 and 部门=a.部门 and 销售量>a.销售量);
select * from
(
select a.*,(select count(*)+1 from 部门销售表 where 日期=a.日期 and 部门=a.部门 and 销售量>a.销售量) as Order_Num
from 部门销售表 a
) b
where b.Order_Num<=100;
得到rownum 取出前一百
*
from
部门销售表 t
where
销售量 in(select 销售量
from 部门销售表
where 日期=t.日期 and 部门=t.部门
order by 销售量 desc limit 100
)
on b.日期=a.日期 and b.部门=a.部门 and a.销售量<=b.销售量
group by a.日期,a.部门a.销售量,a.销售物品 having count(b.日期)<=100