4.1 Spalten gruppieren
Ganz wichtig ist auch, dass Sie beim Gruppieren von Datensätzen im Abschnitt SELECT
nur die Spalten angeben können, nach denen die Daten gruppiert werden.
Dudu kannst nichtSchreiben Sie eine Typabfrage und geben Sie die SELECT
Namensspalte im Abschnitt an :
SELECT brand, name
FROM product
GROUP BY brand
Sie haben eine Reihe von Zeilen in der Produkttabelle mit dem Namensfeld und es ist nicht klar, welche Zeile Sie hier ersetzen müssen. Denken Sie noch einmal darüber nach: Sie möchten die Anzahl der Produkte jeder Marke wissen und wie die resultierende Tabelle den Namen des Produkts erhalten kann?
Wenn Sie den Operator verwenden GROUP BY
, können keine normalen Zeilen in Ihr Ergebnis gelangen, sondern nur Spalten, nach denen Daten gruppiert sind, und „berechnete Spalten“, wie zCOUNT(*)
4.2 Gruppierung nach berechneten Spalten
Sie können jedoch nach mehreren Spalten und sogar nach berechneten Spalten gruppieren. Beispiel:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Und das Ergebnis dieser Abfrage:
Hire_Year | gesamt |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
Lassen Sie uns unsere Anfrage analysieren.
In der Mitarbeitertabelle hat jeder Mitarbeiter ein eindeutiges Einstellungsdatum, daher funktioniert die Gruppierung der Daten nicht. Für jedes Datum gibt es einen Datensatz, und die Gruppierung macht wenig Sinn. Wenn wir jedoch vom Einstellungsdatum zum Einstellungsjahr übergehen, kann es durchaus sein, dass das Unternehmen im selben Jahr mehrere Mitarbeiter eingestellt hat.
Sehen wir uns noch einmal an, wie diese Tabelle vor der Gruppierung aussehen wird:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
Und das Ergebnis dieser Abfrage:
Ausweis | Name | Hire_Year | Beitrittsdatum |
---|---|---|---|
1 | Iwanow Iwan | 2012 | 30.06.2012 |
2 | Petrov Petr | 2013 | 12.08.2013 |
3 | Iwanow Sergej | 2014 | 01.01.2014 |
4 | Rabinovich Moisha | 2015 | 12.05.2015 |
5 | Kirienko Anastasia | 2015 | 10.10.2015 |
6 | Vaska | 2018 | 11.11.2018 |
Die resultierende Tabelle kann jedoch nach „Einstellungsjahr“ gruppiert werden , um herauszufinden, wie viele Personen in einem bestimmten Jahr eingestellt wurden.
4.3 Gruppierung nach mehreren Spalten
Versuchen wir nun herauszufinden, wie viele Mitarbeiter wir in jedem Monat eines jeden Jahres eingestellt haben. Dazu müssen wir der Abfrage nicht nur ein, sondern zwei berechnete Felder gleichzeitig hinzufügen – das Jahr der Einstellung (hire_year) und den Monat der Einstellung (hire_month).
Schreiben wir eine Abfrage wie diese:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
Und das Ergebnis dieser Abfrage:
Ausweis | Name | Hire_Year | Hire_Monat | Beitrittsdatum |
---|---|---|---|---|
1 | Iwanow Iwan | 2012 | 6 | 30.06.2012 |
2 | Petrov Petr | 2013 | 8 | 12.08.2013 |
3 | Iwanow Sergej | 2014 | 1 | 01.01.2014 |
4 | Rabinovich Moisha | 2015 | 5 | 12.05.2015 |
5 | Kirienko Anastasia | 2015 | 10 | 10.10.2015 |
6 | Vaska | 2018 | elf | 11.11.2018 |
Wenn wir die Daten in dieser Ergebnistabelle nach Monaten gruppieren, gruppieren wir die Personen einfach in Gruppen, unabhängig vom Jahr ihrer Einstellung. Und die resultierende Tabelle muss drei Spalten enthalten: Jahr, Monat und die Anzahl der eingestellten Mitarbeiter.
Dazu GROUP BY
müssen Sie nach dem Operator nicht den Namen einer, sondern zweier Spalten verwenden. Beispiel:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
Und das Ergebnis dieser Abfrage:
Hire_Year | Hire_Monat | gesamt |
---|---|---|
2012 | 6 | 1 |
2013 | 8 | 1 |
2014 | 1 | 1 |
2015 | 5 | 1 |
2015 | 10 | 1 |
2018 | elf | 1 |
Wir haben nur wenige Datensätze in der Tabelle, daher gibt es überall in der Gesamtspalte Einheiten. Beachten Sie übrigens, dass das Ergebnis umso mehr Zeilen enthält, je mehr Spalten wir gruppieren.