Problema sentença GROUP BY
Olá pessoal, estou com um problema aki. Eu tenho uma tabela "Secoes" que possui os campos: sec_id (int), sec_nome (varchar) e sec_categoria (int) e uma tabela "Categorias" que tem os campos: cat_id (int) e cat_nome (varchar). O que eu quero fazer é exibir todas as seções cadastradas agrupadas pela categoria, por exemplo:
Categoria: CDS - Seções: Nacionais, Internacionais, Gospel ... etc
Categoria: Livros - Seções: Direito, Informatica, Culinaria... etc
Eu estou usando a clausula GROUP BY assim: SELECT S.sec_nome, C.cat_nome FROM secoes S, categorias C WHERE S.sec_categoria = C.cat_id GROUP BY C.cat_nome;
O problema é que estao sendo retornados apenas a primeira secao de cada categoria assim:
Categoria: CDS - Secoes: Nacionais
Categoria: Livros - Secoes: Direito
se eu uso o count(sec_nome), ele me retorna as quantidades de secoes em cada categoria corretamente, mas ele nao mostra os nomes de todas as sessoes; mostra apenas o nome da primeira secao de cada categoria. Minha sentença SQL tem algum erro? Como deve ficar pra conseguir o resultado desejado? Tem algum outro jeito sem ser usando GROUP BY?
Estou usando mysql 4.1.11 no Fedora 4
Grato
Re: Problema sentença GROUP BY
Na verdade, se você não tem duplcidade de informação na tabela sessões, você não tem por que usar o group by.
E imagino que a cláusula WHERE seja entre sec_categoria e cat_id e não sec_id e cat_id
Re: Problema sentença GROUP BY
Olá,
mas tem duplicidade no campo secao.categoria; tem muitas secoes que pertencem a uma unica categoria, tipo:
NOME da SECAO CATEGORIA
nacionais cds
internacionais cds
gospel cds
direito livros
culinaria livros
celulares eletronicos
TV 29 " eletronicos
ai eu queria fazer uma consulta pra mostrar todas as secoes agrupadas por categoria... e com a sentenca que citei no topico acima, so ta retornando a primeira secao de cada categoria assim:
NOME da SECAO CATEGORIA
nacionais cds
direito livros
celulares eletronicos
nao aparece as secoes intenacionais, gospel, culinaria, nem TV 29 ... alguem sabe explicar pq?
vlw
Re: Problema sentença GROUP BY
Se você fizer da seguinte forma :
Código :
Select s.sec_nome, c.cat_nome
From sessoes s join categorias c on s.sec_cat = c.cat_id
Order by c.cat_nome, s.sec_nome
Aqui você vai trazer todas as sessoes e suas respectivas categorias
Se você colocar o GROUP BY você estará agrupando, restringindo as duplicidades de categoria e trazendo apenas uma sessão de cada......
Se você está pensando em fazer um relatório onde não quer ficar repetindo o nome da categoria, então você deve controlar no relatório... :-)