Gruppe von ‚andere‘, wo Gruppen mit kleinem Beitrag in ‚anderem‘ Feld enthält - MySQL

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich möchte GROUP BY ein Element in meinem Tisch, die einen zugeordneten Geldwert hat. Das kann ich als Prozentsatz trainieren, aber es gibt oft zu viele Elemente in der Liste (zu viele nützlich, in einem Diagramm zum Beispiel zu sein). Folglich würde Ich mag diese Elemente setzen, die einen Beitrag zum insgesamt weniger als 5% sagen, in eine ‚andere‘ Gruppe haben. Irgendwelche Gedanken?

Dank (mit MySQL> v5)

War es hilfreich?

Lösung

Sieht aus wie eine UNION helfen könnte, 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 eines Elements Wert der Gesamtsumme berechnet werden) Sie die Gesamtsumme erhalten können aus noch eine weitere SELECT verschachtelt, aber an einem gewissen Punkt kann es sich lohnen zu Verfahrensansätze Schalt sein als andere Befragte andeuten.

Andere Tipps

Sie haben gefragt, für Gedanken. Ich konnte die SQL für Sie schreiben, aber ich frage mich (basierend auf dem Gesamtdesign) Sie vielleicht nicht finden es einfacher, ein wenig mehr Arbeit in den BL oder UI zu tun, mit einer Anordnung zum Beispiel, das Gleiche zu erreichen. Zum einen wird die SQL notwendigerweise komplizierter und weniger effizient, als Sie vielleicht gefallen.

eine temporäre Tabelle erstellen und zwei Insert-Anweisungen haben, eine Ihrer primären Sachen und einer der anderen Gruppe, dann nur alle aus der temporären Tabelle auswählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top