nerodrom: GROUP BY von GROUP BY-Ergebnis

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

  1. Hallo

    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

    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

    1. 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

      1. Gibts es auch noch die Möglichkeit, fehlende Werte bis X mit 0 zu füllen?

        /nerodrom

        1. 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

          1. 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

  2. Hi !

    SELECT ID, SUM(Anzahl)
    FROM ...
    WHERE...
    GROUP BY ID

    HAVING SUM(Anzahl)=2;

    "Having" dient zum Eingrenzen des "Group by"-Ergebnisses.

    Gruß

    Hans