Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di count in where clausola:uso non valido della funzione di gruppo

Puoi utilizzare solo funzioni aggregate come COUNT() in un HAVING clausola, o nella SELECT clausola quando un GROUP BY viene usato. Il WHERE La clausola opera su righe che provengono da FROM clausola. Non è avvenuta alcuna aggregazione, quindi non è possibile che le funzioni di aggregazione siano significative.

Sembra che quello che vuoi fare sia trovare dalla tabella ENROLL tutti gli studenti che compaiono più di una volta. Quindi vuoi ottenere maggiori dettagli su quegli studenti. Ci sono potenzialmente molti modi per farlo, ma consiglierei una sottoquery.

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

La sottoquery dopo JOIN esegue il primo calcolo (che gli studenti hanno più righe in ENROLL) e fondamentalmente produce una pseudo-tabella con un elenco di ID studente. Dato che stiamo eseguendo un inner join, solo le righe nella tabella STUDENT che hanno un sno nella nostra sottoquery apparirà. Questo è fondamentalmente risolto da ON clausola.

Dato che in un commento hai detto che vuoi essere in grado di applicare condizioni aggiuntive agli studenti, ho aggiunto in alcuni esempi di codice in cui ciò accadrebbe. Poiché tali informazioni provengono dalla tabella STUDENT, possono essere eseguite al di fuori della sottoquery. Non hai specificato specificamente cosa significano "studenti più anziani", quindi ho solo pensato che volessi che i 10 più anziani si iscrivessero a più corsi. Dovresti essere in grado di adattarti in base alle tue esigenze.

Fammi sapere se tutto questo non ha senso e cercherò di spiegarti più in dettaglio.