Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von count in where-Klausel:ungültige Verwendung der Gruppenfunktion

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.