GROUP BY von GROUP BY-Ergebnis
nerodrom
- datenbank
0 Vinzenz Mai0 nerodrom0 nerodrom0 Vinzenz Mai0 nerodrom
0 Hans
Hallo,
ich hab ein Problem mit folgender Abfrage in Form von.
SELECT ID, SUM(Anzahl)
FROM ...
WHERE...
GROUP BY ID
Folgendes Ergebnis wird angezeigt:
ID |SUM(Anzahl)
01|4
02|2
03|1
04|0
05|2
Jedoch möchte ich wissen, wieviele IDs mit beispielsweise der Summe 2 existieren.
D.h. die Tabelle sollte so ausschauen:
Sum(Anzahl) | Summe der IDs
0|1
1|1
2|2
4|1
Hat einer ne Idee wie ich das hinbekomme? Schon mal vielden Dank im Voraus!!
/nerodrom
Hallo
Folgendes Ergebnis wird angezeigt:
ID |SUM(Anzahl)
01|4
02|2
03|1
04|0
05|2Jedoch möchte ich wissen, wieviele IDs mit beispielsweise der Summe 2 existieren.
D.h. die Tabelle sollte so ausschauen:Sum(Anzahl) | Summe der IDs
0|1
1|1
2|2
4|1
Das geht ganz einfach mit einem Subselect, genauer gesagt nimmst Du Deine bisherige Abfrage als Subselect. Geht natürlich nur, wenn Dein DBMS Subselects unterstützt - das ist bei fast allen mir bekannten Datenbankmanagementsystemen der Fall mit der Ausnahme von älteren MySQL-Versionen. Bei MySQL ist 4.1 oder neuer erforderlich.
SELECT
Summe,
COUNT(Summe)
FROM (
SELECT
ID,
SUM(Anzahl) AS Summe -- Aliasname sinnvoll, da sonst der Spaltenname
-- Escapen erfordert.
FROM ...
WHERE...
GROUP BY ID
)
GROUP BY Summe,
ORDER BY Summe
sollte es tun (ungeprüft).
Freundliche Grüße
Vinzenz
SELECT
Summe,
COUNT(Summe)
FROM (
SELECT
ID,
SUM(Anzahl) AS Summe -- Aliasname sinnvoll, da sonst der Spaltenname
-- Escapen erfordert.
FROM ...
WHERE...
GROUP BY ID
)
GROUP BY Summe,
ORDER BY Summe
>
> sollte es tun (ungeprüft).
>
>
> Freundliche Grüße
>
> Vinzenz
Mit ...
~~~sql
SELECT S.Summe, count(S.Summe)
FROM (...
...) AS S
GROUP BY S.Summe
ORDER BY S.Summe
...hat es funktioniert!!!
VIELEN DANK Vinzenz
Gibts es auch noch die Möglichkeit, fehlende Werte bis X mit 0 zu füllen?
/nerodrom
Hallo
Gibts es auch noch die Möglichkeit, fehlende Werte bis X mit 0 zu füllen?
das hängt von Deinem Datenbankmanagementsystem ab - und ist nicht ganz so einfach :-(
Prinzip: Startwert ist 0, weniger Einträge können ja nicht vorhanden sein.
Endwert wäre z.B. über MAX(summe) herauszubekommen. Nun müsstest Du die fehlenden Wert ergänzen. Das könntest Du beispielsweise über eine temporäre Tabelle tun - und diese dann abfragen. Typischerweise wirst Du somit eine Funktion bzw. Stored Procedure benötigen.
Etwas vergleichbares kannst Du in einem Archivposting (bitte auch Fehlerkorrekturen beachten :-)) nachlesen.
Freundliche Grüße
Vinzenz
Hallo
Gibts es auch noch die Möglichkeit, fehlende Werte bis X mit 0 zu füllen?
das hängt von Deinem Datenbankmanagementsystem ab - und ist nicht ganz so einfach :-(
Prinzip: Startwert ist 0, weniger Einträge können ja nicht vorhanden sein.
Endwert wäre z.B. über MAX(summe) herauszubekommen. Nun müsstest Du die fehlenden Wert ergänzen. Das könntest Du beispielsweise über eine temporäre Tabelle tun - und diese dann abfragen. Typischerweise wirst Du somit eine Funktion bzw. Stored Procedure benötigen.Etwas vergleichbares kannst Du in einem Archivposting (bitte auch Fehlerkorrekturen beachten :-)) nachlesen.
Freundliche Grüße
Vinzenz
Danke für deine Zeit und Hilfe!!!
Werd mir das Ganze mal anschauen
Viele Grüße
Hi !
SELECT ID, SUM(Anzahl)
FROM ...
WHERE...
GROUP BY ID
HAVING SUM(Anzahl)=2;
"Having" dient zum Eingrenzen des "Group by"-Ergebnisses.
Gruß
Hans