2009-05-04 3 views
1

Ich möchte GROUP BY ein Element in meiner Tabelle, die einen zugehörigen monetären Wert hat. Dies kann ich als Prozentsatz ausrechnen, es gibt jedoch oft zu viele Elemente in der Liste (zu viele, um nützlich zu sein, zum Beispiel in einem Diagramm). Daher möchte ich die Posten, die einen Beitrag zu insgesamt weniger als 5% leisten, in eine Gruppe "Andere" aufnehmen. Irgendwelche Gedanken?Gruppieren nach 'other', wo Gruppen mit kleinem Beitrag in 'Anderes' Feld enthalten sind - MySQL

Dank (mit MySQL> v5)

Antwort

1

Sieht aus wie eine UNION könnte helfen, z.B. (Je nachdem, wie Ihr Tisch organisiert, natürlich):

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) 

Wenn Sie nicht über ein Prozent Feld, sondern nur (sagen wir) ein Wertfeld (so muss die% dynamisch als das 100-fache der Bruchteil berechnet werden Der Wert eines Elements für die Gesamtsumme) Sie können die Gesamtsumme aus einem weiteren verschachtelten SELECT erhalten, aber zu einem bestimmten Zeitpunkt kann es sich lohnen, zu prozeduralen Ansätzen zu wechseln, wie andere Teilnehmer angeben.

0

Sie baten um Gedanken. Ich könnte das SQL für Sie schreiben, aber ich frage mich (basierend auf Ihrem Gesamtentwurf), dass Sie es vielleicht nicht einfacher finden, etwas mehr Arbeit in der BL oder UI zu tun, zum Beispiel mit einem Array, um dasselbe zu erreichen. Zum einen wird das SQL notwendigerweise komplizierter und weniger effizient sein, als Sie vielleicht möchten.

0

Erstellen Sie eine temporäre Tabelle und zwei Insert-Anweisungen, eine Ihrer primären Sachen und eine der anderen Gruppe, dann wählen Sie einfach alle aus der temporären Tabelle.

Verwandte Themen