2015-11-02 115 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不客氣 –

相關問題