Raggruppa per "altro", in cui i gruppi con un piccolo contributo sono inclusi nel campo "altro": MySQL

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

  •  03-07-2019
  •  | 
  •  

Domanda

Vorrei Raggruppare per un elemento nella mia tabella, che ha un valore monetario associato. Questo posso calcolare in percentuale, tuttavia ci sono spesso troppi elementi nell'elenco (troppi per essere utili, ad esempio in un grafico). Di conseguenza, vorrei inserire in un gruppo "Altro" quegli elementi che hanno un contributo al totale inferiore al 5%. qualche idea?

grazie (usando MySQL > v5)

È stato utile?

Soluzione

Sembra che un UNION possa aiutare, ad es. (a seconda dell'organizzazione del tuo tavolo, ovviamente):

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 non hai un campo percentuale ma solo (diciamo) un campo valore (quindi la% deve essere calcolata dinamicamente come 100 volte la frazione del valore di un articolo rispetto al totale generale) puoi ottenere il totale complessivo da ancora un altro SELEZIONATO nidificato, ma a un certo punto può valere la pena passare ad approcci procedurali come suggeriscono altri intervistati.

Altri suggerimenti

Hai chiesto pensieri. Potrei scrivere l'SQL per te, ma mi chiedo (in base al tuo progetto complessivo) potresti non trovare più facile fare un po 'più di lavoro nel BL o nell'interfaccia utente, ad esempio con un array, per ottenere lo stesso risultato. Per prima cosa, l'SQL sarà necessariamente più complicato e meno efficiente di quanto potresti desiderare.

crea una tabella temporanea e hai due istruzioni insert, una delle tue cose principali e una dell'altro gruppo, quindi seleziona tutto dalla tabella temporanea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top