3.1 GROUP BY-Anweisung

Die SQL-Sprache ist sehr mächtig. Zusätzlich zum einfachen Datenabruf können Sie Daten zum Zeitpunkt der Abfrage gruppieren. Wir möchten zum Beispiel wissen, wie viele Arten von Produkten jeder Marke wir haben. Wie können wir das tun?

Dafür gibt es einen speziellen Operator GROUP BY, so wird er geschrieben.

GROUP BY column

Schreiben wir eine Abfrage, die SQL auffordert, die Anzahl der Produkttypen für jede Marke anzuzeigen. Eine solche Anfrage würde etwa so aussehen:

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

Sie erhalten das folgende Abfrageergebnis:

Marke zählen(*)
(NULL) 2
Bosch 4
IKEA 6
LG 2
Smartflower 1

Lassen Sie uns sorgfältig analysieren, welche Art von Anfrage wir geschrieben haben und welches Ergebnis wir erhalten haben. Als Ergebnis sehen wir zwei Spalten. Das erste mit einer Markenliste, was logisch ist. Wir wollten so etwas wie eine Reihe von Paaren „Marke -> Menge“ erhalten .

Bitte beachten Sie, dass sich unter den Markennamen ein Wort befindet NULL. Tatsächlich haben wir Produkte der Marke, in der es geschrieben steht NULL, und wir sehen sie hier. Etwas unerwartet, aber hilfreich. Wir können sehen, wie viele markenlose Produkte es gibt.

Schauen wir uns nun die Anfrage genauer an. Wir wollten die Anzahl der Produkte jeder Marke wissen, also schrieben wir GROUP BY brand, und in SELECTschrieben wir Marke und den AusdruckCOUNT(*)

COUNT(*)ist eine sogenannte Aggregatfunktion, die für eine Gruppe von Zeilen ausgeführt wird. In unserem Fall zählt sie einfach ihre Anzahl. Es gibt viele solcher Funktionen, wir werden sie uns etwas später ansehen.

3.2 Komplexe Abfragen mit GROUP BY

Schreiben wir nun eine Abfrage, bei der wir zunächst Produkte verwerfen, deren Preis unter 10 liegt, und sie dann gruppieren. Eine solche Anfrage würde etwa so aussehen:

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

Sie erhalten das folgende Abfrageergebnis:

Marke zählen(*)
Bosch 4
IKEA 5
LG 2
Smartflower 1

Alle NULL-Produkte verschwanden aus unserer Ergebnistabelle, da sie sehr günstig waren, und die Anzahl der IKEA-Produkte verringerte sich um 1, von 6 auf 5.

Dies bedeutet, dass Sie zunächst die gewünschten Zeilen zum Filtern anwenden WHEREund erst dann die Gruppierung auf das Ergebnis anwenden.

3.3 Spaltennamen des Ergebnisses

Übrigens können Sie den resultierenden Spalten Namen geben. Sehen Sie, wie der Server den Namen vorgeschlagen hat count(*)? Ersetzen wir es durch total. Eine solche Anfrage würde etwa so aussehen:

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

Sie erhalten das folgende Abfrageergebnis:

Marke gesamt
Bosch 4
IKEA 5
LG 2
Smartflower 1

Sie können auch vorhandene Spalten umbenennen. Nehmen wir eine der zuvor verwendeten Abfragen und fügen den Spalten neue Namen hinzu.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

Sie erhalten das folgende Abfrageergebnis:

Produkt ID Produktname Preis
2 Der Stuhl 5.00
8 Lampe 15.00