我有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名消费客户。 我哪里错了?
答案 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
的原因。