sql >> Database >  >> RDS >> Mysql

Count in where-clausule gebruiken:ongeldig gebruik van groepsfunctie

U kunt alleen statistische functies gebruiken, zoals COUNT() in een HAVING clausule, of in de SELECT clausule wanneer een GROUP BY is gebruikt. De WHERE clausule werkt op rijen die afkomstig zijn van de FROM clausule. Er heeft geen aggregatie plaatsgevonden, dus de aggregatiefuncties kunnen op geen enkele manier zinvol zijn.

Het lijkt erop dat u in de tabel ENROLL alle studenten wilt zoeken die meer dan eens voorkomen. Dan wil je meer informatie over die studenten. Er zijn mogelijk veel manieren om dit te doen, maar ik zou een subquery aanraden.

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

De subquery daar na JOIN doet die eerste berekening (welke studenten meerdere rijen hebben in ENROLL) en produceert in feite een pseudo-tabel met een lijst met student-ID's. Aangezien we een inner join doen, alleen rijen in de STUDENT-tabel die een sno hebben in onze subquery zal verschijnen. Dat wordt in principe verzorgd door de ON clausule.

Omdat je in een opmerking hebt gezegd dat je aanvullende voorwaarden wilt kunnen stellen aan de studenten, heb ik in een voorbeeldcode toegevoegd waar dat zou gebeuren. Aangezien die informatie uit de STUDENT-tabel komt, kan dit buiten de subquery worden gedaan. Je hebt niet specifiek aangegeven wat 'oudste studenten' bedoelen, dus ik ging er gewoon van uit dat je de 10 oudste wilde inschrijven voor meerdere cursussen. Je zou je moeten kunnen aanpassen op basis van je behoeften.

Laat het me weten als dit niet klopt en ik zal proberen het in meer detail uit te leggen.



  1. Aangepaste mysql sorteren op veldwaarde

  2. Afstand tussen postcodes berekenen in PHP

  3. Echo alle veldnamen samen met hun respectieve waarden

  4. Pure-SQL-techniek voor het automatisch nummeren van rijen in de resultatenset