Benjamin Mollenhauer: SQL-Abfrage: Gruppieren

Hallo,

ich hab eine kl. Datenbank mit mySQL realisiert.

Nun möchte ich bei einer Abfrage die Ergebnisse nach Hersteller gruppieren und dann in dieser Gruppe alle nach Kapazität sortieren.

IBM 20 GB
IBM 10 GB
IBM  5 GB
Quantum 20 GB
Quantum 10 GB
etc.

Ich hab dies schon mit GROUP BY (wobei ich nicht genau weiß, was das macht ;) und mit zwei ORDER BY verknüpfungen probiert (hab irgendwo ein AND aufgeschnappt und es damit mal probiert).
Leider alles bisher ohne Ergebnis.

Danke,
Benni

  1. Nun möchte ich bei einer Abfrage die Ergebnisse nach Hersteller gruppieren und dann in dieser Gruppe alle nach Kapazität sortieren.

    IBM 20 GB
    IBM 10 GB
    IBM  5 GB
    Quantum 20 GB
    Quantum 10 GB
    etc.

    Hi Benni!
    ***Du könntest einfach jeden Hersteller in einen neuen
    table kopieren und dann mit order by ausgeben

    ****Du bekommst die Daten auch indem du fuer jeden Hersteller
    select * from daten where hersteller='IBM' order by kapaz;

    ****Kannst du pl/sql verwenden? Wenn ja dann mach einfach einen Cursor:
    CREATE OR REPLACE PROCEDURE anzeigen IS

    CURSOR herst_cur IS SELECT DISTINCT herst, kapaz FROM daten;

    BEGIN

    FOR herst_rec IN herst_cur LOOP
       select * from daten where hersteller=herst_rec.herst order by kapaz;
    END LOOP;

    END;

    Robert

    1. ... oder auch einfach nur:

      select hersteller, kapazitaet
      from tabelle
      order by hersteller, kapazitaet

      Gruß
      Kess

  2. Hallo Benni

    Grundsätzlich wird die Gruppierung mittels 'GROUP BY' zum automatischen Berechnen von Summen, Anzahl, Durchschnitt, Maximal- und Minimalwerten, etc. verwendet (also im Zusammenhang mit den Aggregatsfunktionen). Wenn Du als z. B. die maximale Festplattenkapazität pro Hersteller suchst, kannst Du die Group-By-Klausel verwenden.

    Nehmen wir einmal an, dass Deine Tabelle "Festplatten" heisst und folgende Felder und Datensätze aufweist:

    IDHerstellerKapazitätsonstwas
    1  IBM        20        
    2  Quantum    20        
    3  IBM        5        
    4  Quantum    10        
    5  IBM        10

    Dann lautet das SQL-Statement zur Ermittlung der grössten Kapazität wie folgt:
    SELECT Hersteller, max(Kapazität) as MaxKap
    FROM Festplatten
    GROUP BY Hersteller
    ORDER BY Hersteller

    Das Ergebnis sieht dann so aus:
    HerstellerMaxKap
    IBM        20 GB    
    Quantum    20 GB

    Dein geschildertes Problem, 'Gruppierung' nach Hersteller und Sortierung nach Kapazität lässt sich eher mit der Order-By-Klausel realisieren:
    SELECT ID, Hersteller, Kapazität
    FROM Festplatten
    ORDER BY Hersteller, Kapazität

    Dabei müsste das Ergebnis so aussehen:
    IDHerstellerKapazitätsonstwas
    3  IBM        5 GB      
    5  IBM        10 GB    
    1  IBM        20 GB    
    4  Quantum    10 GB    
    2  Quantum    20 GB

    Hoffentlich funktioniert das bei Dir so, wie hier beschrieben. Das Ganze ist jedoch nicht auf MySql sondern auf MS-SQL getestet.

    Grüsse

    Tom

  3. Danke euch allen,

    das "," in der ORDER BY Klausel hat mein Problem gelöst.
    Vielen Dank, Tom, für deine sehr lehrreiche und ausführliche Erläuterung.

    Viele Grüße,
    Benni