Dúvida com SUM() e GROUP BY
Boa tarde.
Estou encontrando uma dificuldade em uma SQL que tenho que desenvolver.
Ela deve trazer a soma de todos os problemas que ocorreram em determinado dia.
No entanto ela traz várias vezes a mesma data com "pedaços" dos problemas
Como Fica
sum data
1544 26/04
2563 26/04
Como deveria ficar
sum data
4107 26/04
Segue a SQL para análise:
SELECT sum, to_char(dt_hora, 'dd/MM') AS DATA FROM (SELECT sum(qtd), cab.dt_hora
FROM tb_aponta_quali_acaba_itens lanc
JOIN tb_aponta_quali_acaba cab ON lanc.seq_apont_quali_acaba = cab.seq_apont_quali_acaba
JOIN tb_turnos turno ON cab.cod_turno_insp = turno.cod_turno
JOIN tb_aponta_quali_acaba data ON cab.dt_hora = data.dt_hora
GROUP BY cab.dt_hora) AS TESTE GROUP BY sum, DATA ORDER BY DATA Penso que este problema possa ocorrer pois as datas tem horas diferentes de cadastro, mas teria como ignorar o horário e fazer a soma apenas baseado no dia e mês? Muito obrigado, Lucas Hoffmann
FROM tb_aponta_quali_acaba_itens lanc
JOIN tb_aponta_quali_acaba cab ON lanc.seq_apont_quali_acaba = cab.seq_apont_quali_acaba
JOIN tb_turnos turno ON cab.cod_turno_insp = turno.cod_turno
JOIN tb_aponta_quali_acaba data ON cab.dt_hora = data.dt_hora
GROUP BY cab.dt_hora) AS TESTE GROUP BY sum, DATA ORDER BY DATA Penso que este problema possa ocorrer pois as datas tem horas diferentes de cadastro, mas teria como ignorar o horário e fazer a soma apenas baseado no dia e mês? Muito obrigado, Lucas Hoffmann
Lucas Hoffmann
Curtidas 0
Melhor post
Wilson Junior
03/05/2010
Veja se funciona
Espero ter colaborado.
SELECT SUM(Qtd), to_char(cab.dt_hora, 'dd/MM') AS DATA FROM tb_aponta_quali_acaba_itens lanc JOIN tb_aponta_quali_acaba cab ON lanc.seq_apont_quali_acaba = cab.seq_apont_quali_acaba JOIN tb_turnos turno ON cab.cod_turno_insp = turno.cod_turno JOIN tb_aponta_quali_acaba data ON cab.dt_hora = data.dt_hora GROUP BY to_char(cab.dt_hora, 'dd/MM') ORDER BY 2
Espero ter colaborado.
GOSTEI 1
Mais Respostas
Lucas Hoffmann
03/05/2010
A SQL funciona perfeitamente. O único problema que estou tendo é que devo colocá-la em um listview e fazer o Select através do código do programa nesse listview, aí encontro o problema que diz:
"ERRO: faltando entrada para tabela "cab" na cláusula FROM"
Aqui segue a SQL modificada, a parte que está dentro do FROM é a parte que dará origem ao listview:
SELECTsum, to_char(cab.dt_hora, 'dd/MM') AS data FROM (SELECT SUM(Qtd), to_char(cab.dt_hora, 'dd/MM') AS data FROM tb_aponta_quali_acaba_itens lanc JOIN tb_aponta_quali_acaba cab ON lanc.seq_apont_quali_acaba = cab.seq_apont_quali_acaba JOIN tb_turnos turno ON cab.cod_turno_insp = turno.cod_turno JOIN tb_aponta_quali_acaba data ON cab.dt_hora = data.dt_hora GROUP BY to_char(cab.dt_hora, 'dd/MM') ) as teste
GOSTEI 0
Wilson Junior
03/05/2010
1° - de quais tabelas você está retornando os campos Data e Qtde?
2° - pode ser retornado em um SQL sem subselect no FROM?
3° - é utilizado mais algum campo no retorno do SQL?
Aguardo retorno para melhor lhe ajudar.
2° - pode ser retornado em um SQL sem subselect no FROM?
3° - é utilizado mais algum campo no retorno do SQL?
Aguardo retorno para melhor lhe ajudar.
GOSTEI 0
Lucas Hoffmann
03/05/2010
Cara, muito obrigado pela ajuda, mas acabo de resolver meu problema, heheh.
Mesmo assim a tua SQL foi de graaande ajuda.
Valeu mesmo.
Lucas Hoffmann
GOSTEI 0
Wilson Junior
03/05/2010
Ótimo que conseguiu resolver. Mas post aí a solução para os colegas poderem ver a solução também.
Opa! Pelo que vi somos da mesma cidade...
Espero ter colaborado.
Opa! Pelo que vi somos da mesma cidade...
Espero ter colaborado.
GOSTEI 0
Lucas Hoffmann
03/05/2010
O que eu fiz foi apenas criar uma view com o nome de view_rel_media_ppus com esse código:
E agora consigo acessar ela através do sistema com um:
SELECT * FROM view_rel_media_ppus
Pois é, também percebi que somos da mesma cidade. =D
Ajudou mesmo, valeu.
Lucas Hoffmann
SELECT sum(lanc.qtd) AS sum, to_char(cab.dt_hora, 'dd/MM'::text) AS data FROM tb_aponta_quali_acaba_itens lanc JOIN tb_aponta_quali_acaba cab ON lanc.seq_apont_quali_acaba = cab.seq_apont_quali_acaba JOIN tb_turnos turno ON cab.cod_turno_insp = turno.cod_turno JOIN tb_aponta_quali_acaba data ON cab.dt_hora = data.dt_hora GROUP BY to_char(cab.dt_hora, 'dd/MM'::text)
GOSTEI 0
Wilson Junior
03/05/2010
Só um conselho, não utilize alias com palavras reservadas, como você fez com o "sum(lanc.qtd) AS sum", pois para alguns BD isto não é possível. Utilize por exemplo "sum(lanc.qtd) AS sumQtd".
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Lucas Hoffmann
03/05/2010
Pois é, eu percebi isso logo após ter postado e modifiquei para Qtd mesmo. ^^
Muito obrigado,
Lucas Hoffmann
GOSTEI 0