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
);
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
);
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
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. –
Wahrscheinlich nicht die effizienteste Abfrage, um diese Antwort zu erhalten. – jarlh