Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Użycie count w klauzuli WHERE :nieprawidłowe użycie funkcji grupy

Możesz używać tylko funkcji agregujących, takich jak COUNT() w HAVING lub w SELECT klauzula, gdy GROUP BY jest używany. WHERE klauzula działa na wierszach pochodzących z FROM klauzula. Nie miała miejsca agregacja, więc nie ma możliwości, aby funkcje agregujące były znaczące.

Wygląda na to, że chcesz znaleźć w tabeli ENROLL wszystkich uczniów, którzy pojawiają się więcej niż raz. Następnie chcesz uzyskać więcej szczegółów na temat tych uczniów. Potencjalnie można to zrobić na wiele sposobów, ale polecam podzapytanie.

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

Podzapytanie po JOIN wykonuje to pierwsze obliczenie (które studenci mają wiele wierszy w ENROLL) i zasadniczo tworzy pseudo-tabelę z listą identyfikatorów studentów. Ponieważ robimy sprzężenie wewnętrzne, tylko wiersze w tabeli STUDENT, które mają sno w naszym podzapytaniu pojawi się. Zajmuje się tym w zasadzie ON klauzula.

Ponieważ powiedziałeś w komentarzu, że chcesz mieć możliwość zastosowania dodatkowych warunków wobec uczniów, dodałem przykładowy kod, w którym to się stanie. Ponieważ te informacje pochodzą z tabeli STUDENT, można to zrobić poza podzapytaniem. Nie sprecyzowałeś, co konkretnie oznaczają „najstarsi studenci”, więc założyłem, że chcesz, aby 10 najstarszych uczniów zapisało się na wiele kursów. Powinieneś być w stanie dostosować się do swoich potrzeb.

Daj mi znać, jeśli coś z tego nie ma sensu, a postaram się wyjaśnić bardziej szczegółowo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Host MySQL '::1' lub '127.0.0.1' nie może połączyć się z tym serwerem MySQL

  2. Błąd składni MySQL:blisko „1” w wierszu 1

  3. Jak sprawdzić Apostrophe z klauzulą ​​where za pomocą mysql

  4. Spring, MySQL i Hibernate:Błąd bazy danych, jeśli system nie zostanie użyty w ciągu 8 godzin

  5. zaktualizuj tabelę mySQL za pomocą C#