Grupo por 'otro', donde los grupos con pequeña contribución se incluyen en el campo 'otro' - MySQL

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Me gustaría agrupar por un elemento de mi tabla, que tenga un valor monetario asociado. Esto puedo calcularlo como un porcentaje, sin embargo, a menudo hay demasiados elementos en la lista (demasiados para ser útiles, por ejemplo, en un gráfico). En consecuencia, me gustaría poner aquellos artículos que tienen una contribución al total de menos del 5% en un grupo 'Otro'. ¿Alguna idea?

gracias (usando MySQL > v5)

¿Fue útil?

Solución

Parece que una UNIÓN podría ayudar, por ejemplo. (Dependiendo de cómo esté organizada su mesa, por supuesto):

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)

Si no tiene un campo de porcentaje, pero solo (digamos) un campo de valor (por lo tanto, el% debe calcularse dinámicamente como 100 veces la fracción del valor de un elemento al gran total) puede obtener el total general de otro SELECT anidado, pero en algún momento puede valer la pena cambiar a enfoques de procedimiento como lo sugieren otros encuestados.

Otros consejos

Pediste pensamientos. Podría escribir el SQL para usted, pero me pregunto (según su diseño general) que no le resulte más fácil hacer un poco más de trabajo en el BL o la interfaz de usuario, con una matriz, por ejemplo, para lograr lo mismo. Por un lado, el SQL será necesariamente más complicado y menos eficiente de lo que le gustaría.

cree una tabla temporal y tenga dos declaraciones de inserción, una de sus cosas principales y una del otro grupo, luego seleccione todas de la tabla temporal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top