2016-09-28 10 views
0

Ich versuche, die Top 2 Durchschnittspreise anzuzeigen, jedoch habe ich ein Problem, da die beiden Spalten, die ich anzeigen muss, aus verschiedenen Tabellen stammen und der Join gibt mir Fehlermeldungen, wenn ich versuche Lösungen von anderen Threads. Zum Beispiel:Ich versuche, die 2 besten Durchschnittspreise anzuzeigen

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 

Das ist, was ich so weit gekommen, aber es zeigt alle Ergebnisse nicht nur die oben 2.

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

Das Ergebnis, das ich nach bin wäre:

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

Welche Oracle-Version ? – jarlh

Antwort

1

Zuerst lernen Sie richtig join Syntax. Nie Verwenden Sie ein Komma in einer FROM Klausel. ImmerJOIN und ON verwenden.

Dann in Oracle 12C +, können Sie tun:

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; 

Frühere Versionen erfordern eine Unterabfrage:

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

Neuere Oracle-Versionen haben 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 
Verwandte Themen