Grupo por 'outro', onde grupos com pequena contribuição estão incluídas no campo 'outro' - MySQL

StackOverflow https://stackoverflow.com/questions/821370

  •  03-07-2019
  •  | 
  •  

Pergunta

Gostaria de GROUP BY um item na minha mesa, que tem um valor monetário associado. Isso eu posso trabalhar para fora como uma percentagem, no entanto, existem muitas vezes demasiado muitos itens na lista (muitos para ser útil, por exemplo, em um gráfico). Consequentemente, eu gostaria de colocar os itens que têm uma contribuição para o total de menos de digamos 5% em um grupo de 'Outro'. Alguma ideia?

graças (usando MySQL> v5)

Foi útil?

Solução

Parece um UNION poderia ajudar, por exemplo, (Dependendo de como sua mesa está organizado, é claro):

SELECT itemname, SUM(percent) AS pc FROM items
GROUP BY itemtype
HAVING SUM(percent) >= 0.05
UNION
SELECT 'Other', SUM(*) FROM
  (SELECT SUM(percent) FROM items
   GROUP BY itemtype
   HAVING SUM(percent) < 0.05)

Se você não tem um campo por cento, mas apenas (digamos) um campo de valor (para que o% precisa ser calculado dinamicamente como 100 vezes a fração do valor de um item para o total geral) você pode obter o total de ainda outro SELECT aninhada, mas em algum momento ele pode valer a pena a mudança para abordagens processuais como outros entrevistados dica.

Outras dicas

Você pediu pensamentos. Eu poderia escrever o SQL para você, mas eu quero saber (com base na sua concepção global) que você pode não encontrá-lo mais fácil de fazer um pouco mais de trabalho no BL ou UI, com uma disposição por exemplo, para realizar a mesma coisa. Por um lado, o SQL será necessariamente mais complicado e menos eficiente do que você pode gostar.

criar uma tabela temporária e tem duas instruções de inserção, uma de suas coisas primário e um do outro grupo, em seguida, basta selecionar todos da tabela temporária.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top