Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan count in where klausa :penggunaan fungsi grup yang tidak valid

Anda hanya dapat menggunakan fungsi agregat seperti COUNT() dalam HAVING klausa, atau dalam SELECT klausa ketika GROUP BY digunakan. WHERE klausa beroperasi pada baris yang berasal dari FROM ayat. Tidak ada agregasi yang terjadi, jadi tidak mungkin fungsi agregasi menjadi bermakna.

Sepertinya yang ingin Anda lakukan adalah mencari dari tabel ENROLL semua siswa yang muncul lebih dari sekali. Kemudian Anda ingin mendapatkan rincian lebih lanjut tentang siswa tersebut. Kemungkinan ada banyak cara untuk melakukan ini, tetapi saya akan merekomendasikan subquery.

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

Subquery di sana setelah JOIN melakukan perhitungan pertama (yang siswa memiliki beberapa baris dalam DAFTAR) dan pada dasarnya menghasilkan tabel semu dengan daftar ID siswa. Karena kita melakukan inner join, hanya baris dalam tabel STUDENT yang memiliki sno di subquery kami akan muncul. Itu pada dasarnya diurus oleh ON klausa.

Karena Anda mengatakan dalam komentar bahwa Anda ingin dapat menerapkan ketentuan tambahan pada siswa, saya telah menambahkan beberapa kode contoh di mana itu akan terjadi. Karena informasi tersebut berasal dari tabel STUDENT, maka dapat dilakukan di luar subquery. Anda tidak secara spesifik menjelaskan apa yang dimaksud dengan "siswa tertua", jadi saya berasumsi bahwa Anda menginginkan 10 siswa tertua terdaftar dalam beberapa kursus. Anda harus dapat menyesuaikan berdasarkan kebutuhan Anda.

Beri tahu saya jika ada yang tidak masuk akal dan saya akan mencoba menjelaskan lebih detail.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:memilih baris di mana nilai kolom berubah dari baris sebelumnya

  2. Bagaimana menghubungkan flutter ke database mysql localhost

  3. Menangani transaksi di lingkungan multithreaded

  4. Skenario Pencadangan dan Pemulihan Cloud MySQL Menggunakan Microsoft Azure

  5. Cara optimal untuk mengisi nilai yang hilang setelah LEFT JOIN?