Solo puede usar funciones agregadas como COUNT()
en un HAVING
cláusula, o en el SELECT
cláusula cuando un GROUP BY
se usa El WHERE
opera en filas que provienen de FROM
cláusula. No se ha realizado ninguna agregación, por lo que no hay forma de que las funciones agregadas sean significativas.
Parece que lo que quiere hacer es buscar en la tabla INSCRIBIR a todos los estudiantes que aparecen más de una vez. Entonces desea obtener más detalles sobre esos estudiantes. Hay potencialmente muchas maneras de hacer esto, pero recomendaría una subconsulta.
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
La subconsulta allí después de JOIN
hace ese primer cálculo (qué estudiantes tienen varias filas en INSCRIBIRSE) y básicamente produce una pseudotabla con una lista de identificaciones de estudiantes. Como estamos haciendo una unión interna, solo las filas en la tabla ESTUDIANTE que tienen un sno
en nuestra subconsulta aparecerá. De eso se encarga básicamente el ON
cláusula.
Dado que dijo en un comentario que desea poder aplicar condiciones adicionales a los estudiantes, he agregado un código de ejemplo donde eso sucedería. Como esa información proviene de la tabla ESTUDIANTE, se puede hacer fuera de la subconsulta. No especificaste específicamente qué significan los "estudiantes más antiguos", así que asumí que querías que los 10 mayores se inscribieran en varios cursos. Debería poder ajustar según sus necesidades.
Avíseme si algo de esto no tiene sentido e intentaré explicarlo con más detalle.