Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Milton Júnior

função SUM

Recommended Posts

Olá pessoal, estou utilizando as funções COUNT e SUM em duas consultas recentes. Na primeira consulta o count se aplicou perfeitamente pq o select é bem simples. Já na segunda consulta ele não serviu pq preciso usar uma condição para a contagem, e foi daí que testando count e sum, me deperei com uma surpresa:

Sei que o SUM soma os valores de uma coluna, enquanto o COUNT conta a quantidade de registros/linhas.

Mas ao inserir uma condição dentro do SUM, percebi que ele conta as linhas ao invés de somar os registros. E é isso que eu não entendi.

Já procurei no google sobre esse detalhe mas não encontrei explicação nem mesmo no site do mysql.

 

Ex:

Tabela 1

id | num

1 | 2

1 | 5

1 | 6

1 | 8

 

Pois bem, se eu usar:

"SELECT idu, sum(ida) as ida FROM $bancoCli.tb_teste_2 where ida<=5 group by idu"

o resultado será = 7(2+5)

 

Mas se eu usar:

"SELECT idu, sum(ida<=5) as ida FROM $bancoCli.tb_teste_2 group by idu"

o resultado será = 2(registros) ao invés da soma(2+5)

 

Gostaria de saber pq ele conta os registros ao invés de somar os valores.

 

Desde já agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ponha a condição no where

 

WHERE ....IDA<=5

 

 

ou

 

Num CASE

 

Sum((case when ida<=5 then ida else 0 end))

Compartilhar este post


Link para o post
Compartilhar em outros sites

O SUM(), faz a soma dos valores passados dentro da função, no teste lógico "ida<=5" o resultado será sempre TRUE ou FALSE, são dois valores válidos para a soma, somente o NULL não é somado, nem contado.

 

O exemplo do Motta funciona bem, afinal, ele passa o valor a ser somado através de um teste lógico, e para os outros casos, o valor é zero.

 

Funções condicionais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, rapazes! agora entendi pq o sum se comporta como count quando há uma condição. Era minha dúvida.

 

Mas só pra complementar... no exemplo do Motta, acredito que passar a condição pelo WHERE não me serviria já que eu preciso de duas contagens na mesma coluna. No exemplo acima coloquei apenas uma contagem. Se fosse apenas uma, acho que um 'count(ida), where ida<=5' serviria, mas com duas condições acho que o sum é a melhor opção.

Lembrando que o que quero são duas contagens(somas) de linhas na mesma coluna, e não duas somas dos valores da coluna.

 

Minha query real estava assim:

"SELECT idu, SUM(ida<=5) as qtd_ida_menor, SUM(ida>5) as qtd_ida_maior FROM tb_teste GROUP BY idu"

Com o exemplo do Motta ficou assim:

"SELECT idu, SUM(case when ida<=5 then 1 else 0 end) as qtd_ida_menor, SUM(case when ida>5 then 1 else 0 end) as qtd_ida_maior FROM tb_teste GROUP BY idu"

 

Nos dois casos os resultados são exatamente os mesmos e eu já entendi o motivo.

O SUM condicional me dá a contagem que preciso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.