SQL-Abfrage: Gruppieren
Benjamin Mollenhauer
- datenbank
0 Robert Poppe0 Kess
0 Tom0 Benjamin Mollenhauer
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
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
... oder auch einfach nur:
select hersteller, kapazitaet
from tabelle
order by hersteller, kapazitaet
Gruß
Kess
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
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