有一个表:销售员ID:userid,产品ID:pid,该产品的销量:c。表示这个销售员这个产品卖了多少件.
比如如下数据:1 1 10 //1销售了10件1产品
1 2 20 //1销售了20件2产品
1 3 20
1 2 40 
1 3 92 1 4
2 1 8
2 2 4
2 3 98
2 2 883 1 20
3 9 20
3 9 40现在如何求每个销售员销售前2的产品,及其数量需要输出:
1 2 60
1 3 29
2 3 98
2 2 92
3 9 60
3 1 20

解决方案 »

  1.   

    create table temp_tb
    select userid,pid,sum(*) num
    from tb
    group by userid,pid
    select *
    from tb A
    where (select count(*) from tb where A.userid=userid and A.num<num)<2
      

  2.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  3.   

    /* 以下方法,当组内销量最大值有重复时会全部列出,而不会仅仅列出销量平列的前两条记录 */
    select * from t2 a
     where (select count(*) from t2 where userid = a.userid and c > a.c) < 2
     order by a.userid,a.c desc 1楼的方法
    select *
    from tb A
    where (select count(*) from tb where A.userid=userid and A.num<num)<2

    当组内不同产品的销量C的最大值有重复时,这些记录不会被查询出