sql >> Base de Datos >  >> RDS >> Mysql

Uso de la cláusula count in where:uso no válido de la función de grupo

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.