>> 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
