Dúvida MYSQL

3 respostas
rsantik

Olá pessoal, faço um select que me retorna a soma de todo o faturamento, entretanto gostaria de pegar os 6 primeiros maiores faturamentos e o restante gostaria de somar, sendo que estes seria identificado como outros. Aparecia uma tabela mais ou menos assim no select, pensei em usar o union fazer dois selects, mas não acho uma lógica para fazer isso somente numa procedure do mysql, vcs teria uma alternativa para isso?

Faturamento 1 1000,00
Faturamento 1 900,00
Faturamento 1 800,00
Faturamento 1 700,00
Faturamento 1 600,00
Faturamento 1 100,00
Outros 50,00

Abraços,

3 Respostas

drsmachado

Eu partiria direto para a procedure, mesmo pelo ganho de performance e, também, pelo fato de você ter de fazer várias “curvas” para obter os dados que necessita.

Henrique.tenorio

Cara eu acho que com 2 consultas da certo.

1º consulta pega as 6 maiores faturas

SELECT * FROM fatura
order by valor desc
LIMIT 6;

2º consulta - faz a soma dos outros

SELECT  sum(valor) as outros FROM fatura
where id>6
ORDER BY valor desc;

lembrando que o id é a chave da tabela fatura.

drsmachado

A segunda consulta não daria certo desta forma, o que ele deseja é a soma de todos os valores menores que os 6 maiores valores.
Portanto, com essa consulta, considerando que só o registro 2 fosse um dos 6 maiores, a informação seria distorcida.
Numa procedure, ele pode armazenar o mais baixo dos maiores valores e, então, criar uma query onde a cláusula where considere os valores abaixo daquele para soma.
Não acho que duas consultas sejam viáveis nesse caso.

Criado 2 de fevereiro de 2011
Ultima resposta 2 de fev. de 2011
Respostas 3
Participantes 3