>> De: pgbr-geral [mailto:[email protected]] Em
nome de Matheus de Oliveira
>>Enviada em: quinta-feira, 22 de outubro de 2015 15:16

>Por favor, ajude-me dizendo como eu poderia "marcar" o elemento agrupado
>(campanha, codcet, numcondicao) de maior valor.

>Observe abaixo que criei uma coluna "Atendido" para ilustrar como seria o
>resultado esperado, ela não existe na entidade, mas se for necessário posso
>cria-la (pois é uma tabela temporária).

>CAMPANHA        CODCET  NUMCONDICAO     CODCATITE       VALOR
>ATENDIDO
>Caldo 168g      2163250                 1       12249092        5971.00
>SIM
>Caldo 168g      2163250                 1       12249091        2512.33
>NAO
>Caldo 168g      3531694                 1       12249092        55269.56
>SIM
>Caldo 168g      3531694                 1       12249091        14596.32
>NÃO

>>Você quer que o de maior valor tenha ATENDIDO = 'S', certo?
>>Nesse caso você pode usar window function com subconsulta:
>>    SELECT
>>        t.campanha, t.codcet, t.numcondicao, t.codcatite, t.valor,
>>        CASE
>>            WHEN (row_number() OVER(PARTITION BY t.campanha, t.codcet,
t.numcondicao ORDER BY t.valor DESC)) = 1 THEN 'SIM'
>>            ELSE 'NAO'
>>        END AS atendido
>>    FROM sua_tabela t;

>>Se quiser conhecer mais sobre window functions, eu escrevi um artigo sobre
isso há um tempo atrás [1][2], espero que esteja claro.
>>No exemplo acima eu usei a função ROW_NUMBER para enumerar as linhas de
forma decrescente, ou seja, o de maior valor recebe 1, o segundo maior 2, e
assim por diante. Daí >>peguei o que era igual a 1, garantidamente o de
maior valor.
>>Um problema desse método é que se tiver dois itens empatados com o maior
valor, apenas um será marcado de forma aleatória. Caso queira marcar ambos,
basta simplesmente usar a >>função RANK ao invés da ROW_NUMBER.

>> [1] http://dextra.com.br/window-functions-no-postgresql-parte1/
>> [2] http://dextra.com.br/window-functions-no-postgresql-parte-2/


>>Atenciosamente,
>>Matheus de Oliveira

Obrigado, assunto resolvido!



__________ Informação do ESET Endpoint Security, versão da vacina 12449
(20151022) __________

A mensagem foi verificada pelo ESET Endpoint Security.

Mensagem de email - esta OK

http://www.eset.com


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a