Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando contagem na cláusula where:uso inválido da função de grupo


Você só pode usar funções agregadas como COUNT() em um HAVING cláusula, ou no SELECT cláusula quando um GROUP BY é usado. O WHERE cláusula opera em linhas que vêm de FROM cláusula. Nenhuma agregação ocorreu, portanto, não há como as funções agregadas serem significativas.

Parece que o que você quer fazer é encontrar na tabela ENROLL todos os alunos que aparecem mais de uma vez. Então você deseja obter mais detalhes sobre esses alunos. Existem potencialmente muitas maneiras de fazer isso, mas eu recomendaria uma 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

A subconsulta após JOIN faz esse primeiro cálculo (os alunos têm várias linhas em ENROLL) e basicamente produz uma pseudo-tabela com uma lista de IDs de alunos. Como estamos fazendo uma junção interna, apenas as linhas da tabela STUDENT que têm um sno em nossa subconsulta aparecerá. Isso é basicamente cuidado pelo ON cláusula.

Como você disse em um comentário que deseja aplicar condições adicionais aos alunos, adicionei um código de exemplo onde isso aconteceria. Como essa informação vem da tabela STUDENT, ela pode ser feita fora da subconsulta. Você não especificou especificamente o que "alunos mais velhos" significam, então eu apenas assumi que você queria os 10 mais velhos matriculados em vários cursos. Você deve ser capaz de ajustar com base em suas necessidades.

Deixe-me saber se algo disso não faz sentido e tentarei explicar com mais detalhes.