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

Brug af count in where-sætning:ugyldig brug af gruppefunktion

Du kan kun bruge aggregerede funktioner som COUNT() i en HAVING klausul eller i SELECT klausul når en GROUP BY anvendes. WHERE klausul fungerer på rækker, der kommer fra FROM klausul. Ingen aggregering har fundet sted, så der er ingen måde, hvorpå de aggregerede funktioner kan være meningsfulde.

Det ser ud til, at det, du vil gøre, er at finde alle elever, der optræder mere end én gang fra tabellen TILMELD. Så vil du gerne have flere detaljer om de studerende. Der er potentielt mange måder at gøre dette på, men jeg vil anbefale en underforespørgsel.

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

Underforespørgslen der efter JOIN udfører den første beregning (hvilke elever har flere rækker i ENROLL) og producerer grundlæggende en pseudo-tabel med en liste over elev-id'er. Da vi laver en indre joinforbindelse, er det kun rækker i STUDENT-tabellen, der har en sno i vores underforespørgsel vil dukke op. Det er grundlæggende taget hånd om af ON klausul.

Da du i en kommentar sagde, at du ønsker at kunne anvende yderligere betingelser på eleverne, har jeg tilføjet en eksempelkode, hvor det ville ske. Da disse oplysninger kommer fra STUDENT-tabellen, kan det gøres uden for underforespørgslen. Du sagde ikke specifikt, hvad "ældste studerende" betyder, så jeg har bare antaget, at du ville have de 10 ældste tilmeldt flere kurser. Du bør være i stand til at justere ud fra dine behov.

Fortæl mig, hvis noget af dette ikke giver mening, og jeg vil prøve at forklare mere detaljeret.



  1. Kør SQL Server Stored Procedure via Database Link fra Oracle

  2. Hvad er den tilsvarende syntaks for Outer Apply i PostgreSQL

  3. MYSQL vælg forespørgselsreturliste over måneder som streng fra mellem start-/slutdato

  4. Sådan beregnes løbende sum for hver gruppe i MySQL