2015-11-02 84 views
1

我有2个表,购买和客户。 客户有cid,cname ... 购买有total_price购买,一个cid有多个购买。 我需要找到cname和前3名客户花费的最高总价。 我这样做订单总额在输出

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

你必须'ORDER BY sum(p.total_price)DESC' –

+0

......根据你正在使用的内容你可能或不可以做到。我们在PLSQL,MSSQL,mySQL,Access,sqlite还是什么? – LDMJoe

+0

我在unix服务器上使用Oracle –

回答

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是外部查询。

+0

我使用oracle,它显示选择顶部x的错误,我可以在查询中的任何地方使用rownum <= 3吗? –

+0

谢谢你,在oracle中它需要使用sum(total_price)命令后才能使用:)谢谢 –

+0

@SamKeith不客气 –