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.