Em Ter, 2015-06-09 às 17:59 -0300, Marcone escreveu:
> Em 9 de junho de 2015 17:42, JotaComm <jota.c...@gmail.com> escreveu:
> >> Meu select está dando erro dizendo que eu preciso usar
> >> "PESSOAS".nome_pessoa na clausula GROUP BY. Seu eu fiser como pede ela
> >> passa a pedir as outras colunas também.
> >>
> >> SELECT
> >>     "PESSOAS".nome_pessoa,
> >>     "CLIENTES".rg_cliente,
> >>     "CLIENTES".cpf_cliente,
> >>     "ESTADIAS".quarto_estadia,
> >>     "ESTADIAS".entrada_estadia,
> >>     CURRENT_DATE - DATE("ESTADIAS".entrada_estadia) AS diarias,
> >>     "ESTADIAS".valor_estadia,
> >>     SUM("LIGACOES".valortotal_ligacao) AS totalligacoes
> >> FROM
> >>     "ESTADIAS"
> >> JOIN
> >>     "PESSOAS" ON "PESSOAS".id_pessoa = "ESTADIAS".cliente_estadia
> >> JOIN
> >>     "CLIENTES" ON "CLIENTES".pessoa_cliente =
> >> "ESTADIAS".cliente_estadia
> >> JOIN
> >>     "LIGACOES" ON "LIGACOES".quarto_ligacao = "ESTADIAS".quarto_estadia
> >> AND
> >>     "LIGACOES".datahora_ligacao >= "ESTADIAS".entrada_estadia
> >> WHERE
> >>     "ESTADIAS".id_estadia = 1
> >>
> >>
> >> Segue o erro
> >>
> >>
> >> "ERROR:  column "PESSOAS.nome_pessoa" must appear in the GROUP BY clause
> >> or be used in an aggregate function
> >> LINE 2:     "PESSOAS".nome_pessoa,
> >
> > Sim, você está usando o SUM, e para isso precisa do GROUP BY, não tem como
> > fugir, além disso, todas as colunas do teu SELECT terão que aparecer no
> > GROUP BY, isso é por causa da função de agregação SUM.
> 
> Uai não sei se entendi bem, mas não resolveria usando uma window function?
> 
> Tente isso:
> 
>      SUM("LIGACOES".valortotal_ligacao) OVER ()  AS totalligacoes
> 
> Se desejar saber o valor por CPF, por exemplo:
> 
>      SUM("LIGACOES".valortotal_ligacao) OVER (PARTITION BY
> "CLIENTES".cpf_cliente )  AS totalligacoes
> 
> 

Window Function resolveu, pelo menos deixou o select mais enxuto. Window
Function foi introduzido na versão 8.4 e eu ainda não conhecia.
Na verdade creio que não conheço nem metade de todos os recursos do
postgresql, e muito outros recursos que passaram a ser padrão SQL. Eu o
havia deixado de lado a muito, muito tempo. Na verdade eu fiquei
afastado da área de desenvolvimento durante alguns anos. Enferrujei. Por
isso os amigos devem perceber que minhas perguntas no grupo vão de
coisas bobas como sobre JOIN até assuntos mais "avançados" como criação
de funções em plpgsql.

Agradeço a todos que ajudaram.

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a