MySQL - GROUP
Team
- datenbank
Hallo,
wir lernen gerade das Arbeiten mir MySQL Datenbanken und sind bei einen eigenen Beispielaufgabe auf ein Problem gestoßen bei der Verwendung der GROUP BY FUNKTION.
Wir möchten gerne wissen welcher Mitarbeiter in einer Abteilung das geringste Gehalt bekommt.
id vorname nachname abteilung gehalt
11 Frank Berlin 2 1000.00
10 Marie Meyer 2 123.00
9 Kay Schrck 1 2000.00
5 Otto Müller 3 550.00
4 Fred Feuerstein 2 3500.00
1 Max Mustermann 1 47.00
12 David Meier 3 650.00
13 Peter Mustermann 1 1234.00
---------------------------------------------
SELECT id, gehalt, abteilung, min( gehalt )
FROM mitarbeiter
GROUP BY abteilung;
id gehalt abteilung min( gehalt )
9 2000.00 1 47.00
11 1000.00 2 123.00
5 550.00 3 550.00
---------------------------------------------
SELECT id, gehalt, abteilung, min( gehalt )
FROM mitarbeiter
GROUP BY abteilung
HAVING gehalt = min( gehalt );
id gehalt abteilung min( gehalt )
5 550.00 3 550.00
=> Hier sehen wir nur das ein Ergebnis richtig ist!!
Das Ergebnis der Abfrage von den MIN(Gehalt) ist zwar richtig, aber die in der gleichen Zeile angezeigte ID hat nicht dieses Gehalt, wie Ihr auch sehen könnt.
Wir bitten euch um Hilfe .... Mit besten Dank im vorraus! ;-)
yo,
wir lernen gerade das Arbeiten mir MySQL Datenbanken und sind bei einen eigenen Beispielaufgabe auf ein Problem gestoßen bei der Verwendung der GROUP BY FUNKTION.
der erste fehler ist, dass man GROUP BY nicht unter Mysql erlernen kann, das ist das schlechteste, was man machen kann. der hintergrund ist der, das mysql ein feature dabei eingebaut hat, was ich eher für ein bug halte. jedes andere dbms würde euch bei eurer anweisung eine fehlmerldnug ausgeben, weil ihr spalten ausgibt, die keine aggregat-funktionen sind und über die ihr nicht gruppiert habt.
Wir möchten gerne wissen welcher Mitarbeiter in einer Abteilung das geringste Gehalt bekommt.
das ist der zweite fehler, den man dabei machen kann, besonders wieder bei mysql, wenn man mit LIMIT und ORDER BY arbeitet. man muss sich vor augen halten, dass es nicht einen mitarbeiter betreffen kann, sondern mehrere !
und deswegen ist group by der falsche weg, sondern korellierte unterabfragen. ;-)
Ilja
Hello,
wir lernen gerade das Arbeiten mir MySQL Datenbanken und sind bei einen eigenen Beispielaufgabe auf ein Problem gestoßen bei der Verwendung der GROUP BY FUNKTION.
Ich halte MySQL für denkbar ungünstig um GROUP BY zu lernen - warum? MySQL ist toleranter als vorgesehen was die Handhabung von Spalten angeht.
Eine SELECT-Klausel darf bei Verwendung von GROUP BY nur folgende Spalten enthalten:
MfG
Rouven
Hallo,
wir lernen gerade das Arbeiten mir MySQL Datenbanken und sind bei einen eigenen Beispielaufgabe auf ein Problem gestoßen bei der Verwendung der GROUP BY FUNKTION.
wie Rouven und Ilja bin ich auch der Ansicht, dass MySQL das denkbar ungeeignetste
DBMS ist, um den Umgang mit der GROUP-BY-Klausel zu erlernen.
Wir möchten gerne wissen welcher Mitarbeiter in einer Abteilung das geringste Gehalt bekommt.
Sollt ihr herausfinden, wer insgesamt das niedrigste Gehalt bekommt -
wie er heißt und zu welcher Abteilung die Person gehört, oder sollt ihr
herausfinden, welche Personen in jeder Abteilung das niedrigste Gehalt
bekommen, mit entsprechenden Detailangaben?
id vorname nachname abteilung gehalt
11 Frank Berlin 2 1000.00
10 Marie Meyer 2 123.00
9 Kay Schrck 1 2000.00
5 Otto Müller 3 550.00
4 Fred Feuerstein 2 3500.00
1 Max Mustermann 1 47.00
12 David Meier 3 650.00
13 Peter Mustermann 1 1234.00
Wie Ilja bereits geschrieben hat, ist das ein Fall für korrelierte Unterabfragen.
Schaut Euch dazu mal mein Archivposting an.
Freundliche Grüße
Vinzenz
Hallo,
Hi,
wir lernen gerade das Arbeiten mir MySQL Datenbanken und sind bei einen eigenen Beispielaufgabe auf ein Problem gestoßen bei der Verwendung der GROUP BY FUNKTION.
Wir möchten gerne wissen welcher Mitarbeiter in einer Abteilung das geringste Gehalt bekommt.
Ist die GROUP BY -Klausel explizit gefordert?
Sonst wäre das hier ein Beispiel, das euch weiterhilft.
Gruß, Volker
yo,
Sonst wäre das hier ein Beispiel, das euch weiterhilft.
nein und nochmals nein, da es sich erstens um eine korrelierte unterabfrage handeln muss und vor allem zweitems das beispiel mit dem limit einfach mal falsch ist. mysql selbst liefert dann auch die begründung, warum ORDERBY udn LIMIT kein guter weg ist.
Ilja