2017-07-21 4 views
-1

Est-il possible d'utiliser l'alias from avg(n.nota) as media de la clause WHERE?Est-il possible d'utiliser un alias avec où?

SELECT a.nome AS nome, c.nome AS curso, avg(n.nota) AS media from Aluno a 
JOIN Matricula m ON m.aluno_id = a.id 
JOIN Curso c ON m.curso_id = c.id 
JOIN Secao s ON s.curso_id = c.id 
JOIN Exercicio e ON e.secao_id = s.id 
JOIN Resposta r ON r.exercicio_id = e.id and r.aluno_id = a.id 
JOIN Nota n ON n.resposta_id = r.id 
WHERE media > 6 GROUP BY nome; 

Erreur: ERROR 1054 (42S22): Unknown column 'media' in 'where clause'

J'utilise JOIN pour combiner les colonnes et je ne veux pas utiliser des sous-requêtes, comme mentionné dans this question

Est-il possible de faire?

Répondre

0

Pour utiliser un filtre sur des fonctions d'agrégation, utiliser une clause HAVING au lieu d'une clause WHERE:

SELECT a.nome AS nome, c.nome AS curso, avg(n.nota) AS media from Aluno a 
    JOIN Matricula m ON m.aluno_id = a.id 
    JOIN Curso c ON m.curso_id = c.id 
    JOIN Secao s ON s.curso_id = c.id 
    JOIN Exercicio e ON e.secao_id = s.id 
    JOIN Resposta r ON r.exercicio_id = e.id and r.aluno_id = a.id 
    JOIN Nota n ON n.resposta_id = r.id 
GROUP BY nome 
HAVING avg(n.nota) > 6;