Die folgende Abfrage wird alle Datensätze für Studenten auf dem dritten Platz zurückkehren, unabhängig davon, wie viele Schüler für die erste gebunden sind, zweiten oder dritter Platz.
SELECT student_table.name, student_table.marks
FROM student_table
WHERE student_table.primary_key IN ( SELECT ranked.primary_key
FROM student_table ranked
LEFT JOIN student_table others
ON ranked.marks < others.marks
GROUP BY 1
HAVING COUNT(DISTINCT others.marks) + 1 = 3)
Zum Beispiel, wenn student_table
wie folgt aussieht:
+---------+-------+
| name | marks |
+---------+-------+
| Alpha | 100 |
| Able | 100 |
| Bravo | 98 |
| Baker | 98 |
| Bone | 98 |
| Charlie | 93 | <-- 3rd place by marks
| Chimp | 93 | <-- 3rd place by marks
| Delta | 85 |
| Echo | 80 |
| Ebert | 80 |
+---------+-------+
die Abfrage ergeben wird:
+---------+-------+
| name | marks |
+---------+-------+
| Charlie | 93 |
| Chimp | 93 |
+---------+-------+
Als beiseite, würde die Abfrage ein wenig einfacher, wenn MySQL DENSE_RANK unterstützt(), aber Sie können diese Funktion mit Unterabfragen wie oben simulieren.
ist student_name einzigartig? hast du mehrere Noten für 1 Schüler? –
Wie möchten Sie mit Verbindungen umgehen, wenn erlaubt? Z. B. haben zwei Studenten Noten von 100, drei haben Marken von 98 und fünf haben Marken von 95? – pilcrow