Bei Group By Anteile berechnen [MySQL]

HRGS85

Benutzer
Beiträge
23
Hi zusammen,

ich habe folgende Abfrage:

select status, sum(base_subtotal)
from sales_flat_orderGroup by status

die Abfrage gibt mir für jeden Statustypen die Summe der Nettoumsätze. Jetzt möchte ich für jeden Statustypen zusätzlich den Anteil am Gesamtumsatz wissen. Also die Umsätze hinter jedem Statustypen dividiert durch die gesamte Summe base_subtotal.

Das Problem ist, dass ich die gesamte Summe base_subtotal nicht berechnen kann, wegen des Group by Statements. sum(base_subtotal) bezieht sich durch Group by schließlich nur auf die einzelnen Gruppe und nicht auf alle Zeilen...

Hat da jemand eine Idee?
 
Werbung:
Hi zusammen,

ich habe folgende Abfrage:

select status, sum(base_subtotal)
from sales_flat_orderGroup by status

die Abfrage gibt mir für jeden Statustypen die Summe der Nettoumsätze. Jetzt möchte ich für jeden Statustypen zusätzlich den Anteil am Gesamtumsatz wissen. Also die Umsätze hinter jedem Statustypen dividiert durch die gesamte Summe base_subtotal.

Das Problem ist, dass ich die gesamte Summe base_subtotal nicht berechnen kann, wegen des Group by Statements. sum(base_subtotal) bezieht sich durch Group by schließlich nur auf die einzelnen Gruppe und nicht auf alle Zeilen...

Hat da jemand eine Idee?

Meep.

Du hast:

Code:
test=*# select * from hrgs ;
 status | val
--------+-----
  1 |  10
  1 |  12
  1 |  22
  2 |  13
  2 |  15
  2 |  42
  3 |  2
  3 |  1
  3 |  5
(9 rows)

und willst

Code:
test=*# select distinct status, 100*(sum_per_status / sum_ueber_alles)::numeric(5,3) from (select status, (sum(val) over (partition by status))::numeric as sum_per_status, sum(val) over () as sum_ueber_alles from hrgs ) foo order by status;
 status | ?column?
--------+----------
  1 |  36.100
  2 |  57.400
  3 |  6.600
(3 rows)

Oder? Also einfach, nur kurz noch MySQL gegen PostgreSQL getauscht und alles flutscht.
 
Hi.

Auf die Schnelle hätte ich diesen Vorschlag:
Code:
SELECT status,
       SUM(base_subtotal) AS subtotal,
       SUM(base_subtotal) / (SELECT SUM(base_subtotal) FROM sales_flat_order)  AS anteil
FROM sales_flat_order
GROUP BY status

Gruß
Hony
 
Hier noch eine möglicherweise ressourcenschonendere Variante:

Code:
SELECT status,
       SUM(a.base_subtotal) AS subtotal,
       SUM(a.base_subtotal) / gesamt AS anteil
FROM sales_flat_order AS a
CROSS JOIN (SELECT SUM(base_subtotal) AS gesamt FROM sales_flat_order)
GROUP BY status
 
Werbung:
Zurück
Oben