Sie können nur Aggregatfunktionen wie COUNT()
verwenden in einem HAVING
-Klausel oder in SELECT
-Klausel, wenn ein GROUP BY
wird genutzt. Das WHERE
-Klausel arbeitet mit Zeilen, die aus FROM
stammen Klausel. Es hat keine Aggregation stattgefunden, daher können die Aggregatfunktionen nicht sinnvoll sein.
Anscheinend möchten Sie in der ENROLL-Tabelle alle Schüler finden, die mehr als einmal vorkommen. Dann möchten Sie mehr Details über diese Schüler erfahren. Es gibt möglicherweise viele Möglichkeiten, dies zu tun, aber ich würde eine Unterabfrage empfehlen.
SELECT s.*
FROM student AS s
JOIN (
SELECT e.sno
FROM enroll AS e
GROUP BY e.sno
HAVING COUNT(*) > 1
) AS e
ON e.sno = s.sno
ORDER BY s.age DESC
LIMIT 10
Die Unterabfrage dort nach JOIN
führt diese erste Berechnung durch (welche Schüler mehrere Zeilen in EINSCHREIBEN haben) und erzeugt im Grunde eine Pseudo-Tabelle mit einer Liste von Schüler-IDs. Da wir eine innere Verknüpfung durchführen, werden nur Zeilen in der STUDENT-Tabelle mit einem sno
in unserer Unterabfrage wird angezeigt. Dafür sorgt im Grunde das ON
Klausel.
Da Sie in einem Kommentar gesagt haben, dass Sie zusätzliche Bedingungen auf die Schüler anwenden möchten, habe ich einen Beispielcode hinzugefügt, in dem dies geschehen würde. Da diese Informationen aus der Tabelle STUDENT stammen, können sie außerhalb der Unterabfrage erfolgen. Sie haben nicht genau gesagt, was "älteste Studenten" bedeuten, also bin ich einfach davon ausgegangen, dass Sie wollten, dass die 10 ältesten in mehreren Kursen eingeschrieben sind. Sie sollten in der Lage sein, sich an Ihre Bedürfnisse anzupassen.
Lassen Sie mich wissen, wenn irgendetwas davon keinen Sinn ergibt, und ich werde versuchen, es genauer zu erklären.