Bạn chỉ có thể sử dụng các hàm tổng hợp như COUNT()
trong một HAVING
hoặc trong SELECT
mệnh đề khi GROUP BY
Được sử dụng. WHERE
mệnh đề hoạt động trên các hàng đến từ FROM
mệnh đề. Không có sự tổng hợp nào diễn ra, vì vậy không có cách nào để các hàm tổng hợp có ý nghĩa.
Có vẻ như những gì bạn muốn làm là tìm từ bảng GHI DANH tất cả các học sinh xuất hiện nhiều hơn một lần. Sau đó, bạn muốn biết thêm chi tiết về những sinh viên đó. Có nhiều cách để thực hiện việc này, nhưng tôi khuyên bạn nên sử dụng một truy vấn con.
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
Truy vấn con ở đó sau JOIN
thực hiện phép tính đầu tiên đó (sinh viên có nhiều hàng trong GHI DANH) và về cơ bản tạo ra một bảng giả với danh sách ID sinh viên. Vì chúng tôi đang thực hiện phép nối bên trong, chỉ các hàng trong bảng STUDENT có sno
trong truy vấn con của chúng tôi sẽ hiển thị. Về cơ bản, điều đó được thực hiện bởi ON
mệnh đề.
Vì bạn đã nói trong một nhận xét rằng bạn muốn có thể áp dụng các điều kiện bổ sung cho học sinh, tôi đã thêm vào một số mã ví dụ nơi điều đó sẽ xảy ra. Vì thông tin đó đến từ bảng STUDENT, nó có thể được thực hiện bên ngoài truy vấn con. Bạn không nói rõ cụ thể "sinh viên lớn tuổi nhất" nghĩa là gì, vì vậy tôi chỉ giả sử bạn muốn 10 người lớn tuổi nhất đăng ký nhiều khóa học. Bạn có thể điều chỉnh dựa trên nhu cầu của mình.
Hãy cho tôi biết nếu bất kỳ điều nào trong số này không hợp lý và tôi sẽ cố gắng giải thích chi tiết hơn.