2009-05-04 10 views
1

Je voudrais GROUPER un article dans ma table, qui a une valeur monétaire associée. Je peux calculer cela en pourcentage, mais il y a souvent trop d'éléments dans la liste (trop nombreux pour être utiles, par exemple dans un graphique). Par conséquent, je voudrais placer les articles qui ont contribué au total de moins de 5% dans un groupe «Autre». Des pensées?Regrouper par 'autre', où les groupes avec une petite contribution sont inclus dans le champ 'autre' - MySQL

merci (en utilisant MySQL> v5)

Répondre

1

On dirait qu'une UNION pourrait aider, par ex. (Selon la façon dont a organisé de votre table, bien sûr):

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 vous ne disposez pas d'un champ pour cent, mais seulement (par exemple) un champ de valeur (de sorte que le% doit être calculée dynamiquement 100 fois la fraction la valeur d'un élément par rapport au total général) vous pouvez obtenir le total général à partir d'un autre SELECT imbriqué, mais à un moment donné, il peut être utile de passer à des approches procédurales comme le suggèrent d'autres répondants.

0

Vous avez demandé des pensées. Je pourrais écrire le SQL pour vous, mais je me demande (basé sur votre conception globale) vous pourriez ne pas trouver plus facile de faire un peu plus de travail dans le BL ou l'IU, avec un tableau par exemple, pour accomplir la même chose. D'une part, le SQL sera nécessairement plus compliqué et moins efficace que vous pourriez aimer.

0

créez une table temporaire et disposez de deux instructions d'insertion, l'une de vos tâches principales et l'autre de l'autre groupe, puis sélectionnez simplement tout dans la table temporaire.