2017-01-03 2 views
-3

Wie funktioniert diese Where-Klausel?Können Sie mir erklären, wie diese Abfrage funktioniert?

SELECT ENAME,SAL 
FROM EMP E 
WHERE 3 > (
    SELECT COUNT(*) 
    FROM EMP 
    WHERE SAL > E.SAL 
); 
+1

Sie wirklich Beispieldaten hinzufügen sollten, es sei denn, Sie Beispieltabellen verwenden Oracle, und auch in diesem Fall Vielleicht möchten Sie es etwas eingrenzen. –

+0

Wahrscheinlich nicht die effizienteste Abfrage, um diese Antwort zu erhalten. – jarlh

Antwort

0

Diese Abfrage gibt alle Mitarbeiter zurück, für die es streng weniger als 3 andere Mitarbeiter gibt, die ein höheres Gehalt haben.

Zum Beispiel, wenn Sie den folgenden Satz von Mitarbeitern und Gehälter hatte:

Fred $100 
Bill $80 
John $60 
Jack $50 

Dann würde Ihre Abfrage alle zurückkehren außer für Jack, weil Jack 3 Angestellte hat, die ein höheres Gehalt haben als er , aber alle anderen haben 2 oder weniger.

Hinweis: Ihre Abfrage streng nicht geben Sie die drei Mitarbeiter mit den höchsten Gehältern zurück, weil es doppelte Gehälter nicht berücksichtigt. Wenn Sie eine Abfrage wollen die Mitarbeiter in den Top 3 auch in Gegenwart von Verbindungen zu finden, können Sie dies versuchen:

SELECT ENAME,SAL 
FROM EMP E 
WHERE (
    SELECT COUNT(DISTINCT SAL) 
    FROM EMP 
    WHERE SAL > E.SAL 
) < 3 
Verwandte Themen