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.