+ Responder ao Tópico



  1. #1
    eduardounai
    Visitante

    Padrão 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

  2. #2

    Padrão 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

  3. #3
    eduardounai
    Visitante

    Padrão 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

  4. #4

    Padrão 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... :-)