订单总和在输出中汇总

时间:2015-11-02 15:14:18

标签: sql oracle

我有2张桌子,购物和顾客。 客户有cid,cname ...... 购买有total_price的购买,一个cid有多次购买。 我需要找到前三名客户花费的cname和最高总价。 我这样做

select c.cname, 
       sum(p.total_price) 
  from purchases p
       inner join 
       customers c 
         on p.cid=c.cid
 where p.total_price <= (select max(total_price) 
                           from purchases
                        ) 
group by p.cid,
         c.cname
order by c.cname;

我得到了总和,但我无法订购并获得前3名消费客户。 我哪里错了?

1 个答案:

答案 0 :(得分:2)

您需要的只是ROWNUM <= 3条件和适当的ORDER BY

SELECT
    cname
    , total_purchase
FROM (SELECT
          c.cname
        , sum(p.total_price) as total_purchase
      FROM customers c
          INNER JOIN purchases p on p.cid = c.cid
      GROUP BY c.cname
      ORDER BY total_purchase DESC) RS
WHERE ROWNUM <= 3;

在Oracle中,您需要在将结果集限制为前3位客户之前对其进行排序,这就是外部查询中ROWNUM <= 3的原因。