Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida sobre o group

Por que apenas o c.nome é inserido no group? E se inserirmos o count(m.id) também, daria certo? Se não, qual seria a razão?

mysql> select c.nome, count(m.id) as numero_matriculas from
select c.nome, count(m.id) as numero_matriculas from
    -> curso c join matricula m on c.id = m.curso_id
    -> group by c.nome, numero_matriculas
    -> having numero_matriculas > 1;
1 resposta
solução

Bom dia Roger!

Se inserirmos o count(m.id), que tem o alias numero_matriculas, a query não roda.

Query:

select c.nome, count(m.id) as numero_matriculas from curso c join matricula m on c.id = m.curso_id group by c.nome, numero_matriculas having numero_matriculas > 1;

Mensagem de erro:

ERROR 1056 (42000): Can't group on 'numero_matriculas'

Se você executar essa outra query:

select c.nome, count(m.id) as numero_matriculas from curso c join matricula m on c.id = m.curso_id group by c.nome having numero_matriculas > 1;

Vai retornar isso:

+----------------------+-------------------+
| nome                 | numero_matriculas |
+----------------------+-------------------+
| SQL e banco de dados |                 2 |
+----------------------+-------------------+
1 row in set (0.00 sec)

A razão para isso é que você está fazendo uma agregação apenas nas matrículas. Caso você tivesse uma terceira tabela na consulta, e fizesse outra agregação (max, min, sum, avg, count), você teria duas colunas na cláusula group by.

Sacou?