2016-09-28 41 views
0

我想顯示前2位的平均價格,但是我遇到了一個問題,因爲我需要顯示的兩列來自不同的表格,並且當我嘗試時,連接會給出錯誤消息其他線程的解決方案。例如:試圖顯示前2位的平均價格

Customer Table   Order Table 
CID,CNAME    OID,CID,OPRICE  
1, JOHN     1, 1, 2.50 
2, JEFF     2, 1, 3.40 
3, ROB     3, 2, 4.20 
         4, 3, 3.50 

這是我這麼遠,但它會顯示所有的結果不只是頂部2

SELECT CNAME,AVG(OPRICE) 
FROM CUSTOMER, ORDER 
WHERE CUSTOMER.CID=ORDER.CID 
GROUP BY CNAME; 

我之後的結果將是:

CNAME,AVG(OPRICE) 
JEFF, 4.20 
ROB, 3.50 
+0

哪個Oracle版本? – jarlh

回答

1

首先,學習正確的join語法。 從不FROM條款中使用逗號。 總是使用JOINON

然後,在甲骨文12C +,你可以這樣做:

SELECT c.CNAME, AVG(o.OPRICE) 
FROM CUSTOMER c JOIN 
    ORDER o 
    ON c.CID = o.CID 
GROUP BY c.CNAME 
ORDER BY AVG(o.OPRICE) DESC 
FETCH FIRST 2 ROWS ONLY; 

早期版本要求的子查詢:

SELECT CNAME, avg_oprice 
FROM (SELECT c.CNAME, AVG(o.OPRICE) as avg_oprice 
     FROM CUSTOMER c JOIN 
      ORDER o 
      ON c.CID = o.CID 
     GROUP BY c.CNAME 
     ORDER BY AVG(o.OPRICE) DESC 
    ) c 
WHERE rownum <= 2; 
0

最近的Oracle版本必須FETCH FIRST

SELECT CNAME,AVG(OPRICE) as AVGPRICE 
FROM CUSTOMER, ORDER 
WHERE CUSTOMER.CID=ORDER.CID 
GROUP BY CNAME 
ORDER BY AVGPRICE DESC 
FETCH FIRST 2 ROWS ONLY