Mysql-Abfrage mit Summe und Anteil

Liebe/-r Experte/-in,
ich habe folgende Abfrage:
SELECT name, COUNT(*) as Anzahl_Kaeufe, SUM(verkauf) as Umsatz FROM verkauf
GROUP BY name WITH ROLLUP;

Ich möchte gern in dieser Abfrage den Anteil der Anzahl_Kaeufe an der Gesamtanzahl der Kaeufe ausrechnen.

Ich kann mit der WITH ROLLUP-Funktion ja in der letzten Zeile die Summe sehen. Kann ich mich in den Detailzeilen auf diese Rollupsumme von Anzahl_Kaeufe beziehen. Bsp (funktioniert mit dieser Syntax natürlich nicht):
SELECT name, COUNT(*) as Anzahl_Kaeufe, SUM(verkauf) as Umsatz, COUNT(*)/ROLLUPSUM(COUNT(*)) as Anteil
FROM verkauf
GROUP BY name WITH ROLLUP;
Geht so etwas überhaupt?
Wenn nicht müßte ich das Ergebnisarray erst auswerten und dann pro Zeile diesen Wert berechnen.
Vielen Dank.
Sven Schulze

Hi Sven,

ich weiß nicht, ob’s hilft, aber wenn du mehrere Spalten gruppierst („group by spalte1, spalte2“ etc.), wird ROLLUP auf alle angewendet.

LG
Frank

Hi Sven,

nach ein bischen probieren: nein geht so nicht meiner Meinung nach.
Sich auf das Rollup-Ergebnis beziehen geht nicht. Also tatsächlich erst Ergebnisarray berechnen oder so was und dann nochmal.
Alternativ wäre eine SubQuery für die Anzahl der Verkäufe, aber das wird langsam ohne Ende.
Zudem sollte man dann mal ein paar Musterdaten haben :smile:)

Gruß
Proteus

Hi vielen Dank für die Tests.
Ich habe es jetzt mit mehreren Loops durch das Ergebnisarray erfolgreich hingbekommen, ein Loop um die Gesamtergebnisse zu berechnen, ein zweiter um die Anteile zu berechnen und ein dritter um die Ergebnisse anzuzeigen (wird in Diagramm übertragen). Ich denke das ist sauberer und schneller als mit subqueries.

Schönen Tag noch.

Sven

Hay,

mache zwar lange kein MySQL mehr,
aber teste mal dieses Fragment…

SELECT name, COUNT(*) as Anzahl_Kaeufe, SUM(verkauf) as Umsatz, Anzahl__Kaeufe/ROLLUPSUM(Anzahl_Kaeufe) as Anteil …

hi,

sorry, kann dir im moment leider nicht weiterhelfen.

cu
harald
**************

Wie sieht die tabelle aus,
was willst du berechnen (in worten beschrieben),
tut vielleicht count(*)/sum(spaltenname)
mehr infos -> bessere hilfe.
gruss Frank