现有一个部门销售表如下
日期(年月日)    部门(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之类的实现,谢谢

解决方案 »

  1.   

    可以用如下语句。select *
    from 部门销售表 a
    where 100>(select count(*) from 部门销售表 where 日期=a.日期 and 部门=a.部门 and 销售量>a.销售量);
      

  2.   


    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;
      

  3.   

    (select count(*) as rownum from 部门销售表 where 日期=a.日期 and 部门=a.部门 and 销售量>a.销售量);
    得到rownum 取出前一百
      

  4.   

    select 
      *
    from 
      部门销售表 t
    where
      销售量 in(select 销售量 
                 from 部门销售表 
                 where 日期=t.日期 and 部门=t.部门 
                 order by 销售量 desc limit 100
               )
      

  5.   

    select a.日期,a.部门a.销售量,a.销售物品 from 部门销售表 a left join 部门销售表 b
    on b.日期=a.日期 and b.部门=a.部门 and a.销售量<=b.销售量
    group by a.日期,a.部门a.销售量,a.销售物品 having count(b.日期)<=100