2017-10-24 2 views
1

Hier ist die Abfrage, die ich versuchte: Nun, wenn ich Elemente wie 1, 2, 3, 4, 5 habe. Es sollte 4 geben & 5 aber das ist die Rückkehr 2, 3, 4 5. Wie kann ich tun es ohne eingebaute FunktionenFinden Sie die Top 2 Werte aus einer Tabelle

SELECT S.item, max(B.QUANTITY) 
FROM Bucket B, Store S 
WHERE S.Store_ID = B.Store_ID 
AND QUANTITY > (SELECT min(QUANTITY) 
       FROM Store S, Bucket B 
       WHERE S.Store_ID = B.Store_ID) 
       GROUP BY S.item 
+2

Markieren Sie Ihre Frage mit der von Ihnen verwendeten Datenbank. –

+2

Fördern Sie die Verwendung von expliziten 'JOIN' sintaxis, schrieb Aaron Bertrand einen schönen Artikel [Schlechte Angewohnheiten zu treten: mit alten Stil JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/ schlechte Gewohnheiten-zu-kick-mit-alten-Stil-joins.aspx) darüber. –

+0

Vielleicht weil du tust: 'QUANTITY> (SELECT min (QUANTITY) ...' das ist definitiv * nicht * Top-Wert ...;) – alfasin

Antwort

0

Try this:

select top (2) * from (

SELECT S.item, max(B.QUANTITY) 
FROM Bucket B, Store S 
WHERE S.Store_ID = B.Store_ID 
AND QUANTITY > (SELECT min(QUANTITY) 
       FROM Store S, Bucket B 
       WHERE S.Store_ID = B.Store_ID) 
       GROUP BY S.item 

) order by [Item] desc 

Sie können ersetzen müssen [Option], mit dem, was Spalte enthält die "4" und "5" Werte, die Sie suchen.

+0

Mit der eingebauten Funktion kann ich das tun, aber ich habe versucht, es ohne sie zu tun – negan

0

Unter der Annahme, Oracle-SQL, können Sie dies tun:

SELECT * 
    FROM (SELECT S.item, MAX(B.QUANTITY) 
      FROM Bucket B, Store S 
     WHERE S.Store_ID = B.Store_ID 
     GROUP BY S.item 
     ORDER BY MAX(B.QUANTITY) DESC) 
WHERE ROWNUM <= 2; 

edit: hat einen groupBy, ziemlich sicher, dass es nicht ohne sie funktionieren würde!

Verwandte Themen