sql >> Databasteknik >  >> RDS >> Mysql

Använder count in where-sats :ogiltig användning av gruppfunktion

Du kan bara använda aggregerade funktioner som COUNT() i en HAVING sats, eller i SELECT sats när en GROUP BY är använd. WHERE satsen fungerar på rader som kommer från FROM klausul. Ingen aggregering har skett, så det finns inget sätt för de aggregerade funktionerna att vara meningsfulla.

Det ser ut som att det du vill göra är att i tabellen ENROLL hitta alla elever som dyker upp mer än en gång. Då vill du få mer information om de eleverna. Det finns potentiellt många sätt att göra detta, men jag skulle rekommendera en underfråga.

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

Underfrågan där efter JOIN gör den första beräkningen (vilka elever har flera rader i ENROLL) och producerar i princip en pseudotabell med en lista över student-ID. Eftersom vi gör en inre koppling är det bara rader i STUDENT-tabellen som har en sno i vår underfråga kommer att dyka upp. Det sköts i princip av ON klausul.

Eftersom du i en kommentar sa att du vill kunna tillämpa ytterligare villkor på eleverna har jag lagt till i någon exempelkod där det skulle hända. Eftersom den informationen kommer från STUDENT-tabellen kan den göras utanför underfrågan. Du angav inte specifikt vad "äldsta studenter" menade, så jag har bara antagit att du ville ha de 10 äldsta inskrivna i flera kurser. Du bör kunna justera utifrån dina behov.

Låt mig veta om något av detta inte är vettigt så ska jag försöka förklara mer detaljerat.



  1. Slutför AJAX-samtal innan PayPal-knappen omdirigerar

  2. Vad är Oracle Database?

  3. hur man uppdaterar id från en tabell till en annan

  4. Hur returnerar man infogat rad i mysql med json-format?