Dass SQL nicht nur was mit Webentwicklung zu tun hat, dürfte den meisten Leuten klar sein, denke ich. *schulterzuck*

Zu deinem Problem: Du hast zum Teil recht (was die spezielle Abfrage angeht) und ich hab recht (was das Allgemeine über SQL angeht, das mit den inneren Queries hast du imho noch etwas missverstanden). Tatsächlich macht meine Abfrage Zicken, wenn die Situationen sehr speziell sind.

Ich hab mal ne Testtabelle "test" angelegt mit 10 (ids 1-10) Zeilen mit ner Spalte "wert". Das Query ist also:

Code:
SELECT * FROM test t1 WHERE ( SELECT COUNT( * ) FROM test t2 WHERE t1.wert > t2.wert ) = 4;
Beispiel 1: Die 10 Zeilen haben die Werte 10 bis 100:

Dann ist das Ergebnis korrekterweise 5, 50

Beispiel 2: Alle Zeilen haben den Wert 10

Kein Ergebnis (0 Zeilen)

Beispiel 2: Die Zeilen haben die Werte 10,10,10,20,20,30,40,50,60,70

Kein Ergebnis (0 Zeilen)

Das kommt daher, dass er genau 4 Zeilen finden will, die kleiner sind, in all diesen Fällen gibts aber mehr als 4 für die richtige Zeile. Einfach >= setzen geht auch nicht, weil er dann ALLE Zeilen ausgibt die größer sind (und wenn wir Limit hätten, hätten wir das Problem ja nicht).

Die folgende Query könnte etwas besser sein, langsam wirs aber reichlich lächerlich (und in der Arbeit hätte ich auch schon lange zu nem Datenbank-spezifischen Befehl gegriffen *g*)...

Code:
SELECT * FROM test t1 WHERE ( SELECT COUNT( * ) FROM (SELECT * FROM test t3 group by t3.wert) t2 WHERE t1.wert > t2.wert ) = 4;