3.1 Declarația GROUP BY

Limbajul SQL este foarte puternic. Pe lângă preluarea simplă a datelor, vă permite să grupați datele în timpul interogării. De exemplu, vrem să știm câte tipuri de produse de fiecare marcă avem, cum putem face asta?

Există un operator special pentru asta GROUP BY, iată cum este scris.

GROUP BY column

Să scriem o interogare care solicită SQL să afișeze numărul de tipuri de produse pentru fiecare marcă. O astfel de cerere ar arăta cam așa:

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

Veți obține următorul rezultat al interogării:

marca numara(*)
(NUL) 2
Bosch 4
IKEA 6
LG 2
Smartflower 1

Să analizăm cu atenție ce fel de cerere am scris și ce fel de rezultat am obținut. Ca rezultat, vedem două coloane. Primul cu o listă de mărci, ceea ce este logic. Am vrut să obținem ceva de genul unui set de perechi „brand --> amount” .

Vă rugăm să rețineți că printre numele mărcilor există un cuvânt NULL. Într-adevăr, avem produse în marca în care este scris NULLși le vedem aici. Puțin neașteptat, dar util. Putem vedea câte produse fără marcă există.

Acum să aruncăm o privire mai atentă la cerere. Am vrut să știm numărul de produse ale fiecărui brand, așa că am scris GROUP BY brand, iar în SELECTam scris brand și expresiaCOUNT(*)

COUNT(*)este o așa-numită funcție agregată care este efectuată pe un grup de rânduri. În cazul nostru, ea pur și simplu numără numărul lor. Există o mulțime de astfel de funcții și le vom analiza puțin mai târziu.

3.2 Interogări complexe cu GROUP BY

Acum să scriem o interogare în care mai întâi aruncăm produsele al căror preț este mai mic de 10, apoi le grupăm. O astfel de cerere ar arăta cam așa:

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

Veți obține următorul rezultat al interogării:

marca numara(*)
Bosch 4
IKEA 5
LG 2
Smartflower 1

Toate produsele NULL au dispărut din tabelul nostru de rezultate, deoarece erau foarte ieftine, iar numărul de produse IKEA a scăzut cu 1. De la 6 la 5.

Acest lucru sugerează că mai întâi aplicați WHEREliniile dorite pentru a filtra și abia apoi aplicați gruparea rezultatului.

3.3 Numele coloanelor rezultatului

Apropo, puteți da nume coloanelor rezultate. Vedeți cum a sugerat serverul numele count(*)? Să-l înlocuim cu total. O astfel de cerere ar arăta cam așa:

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

Veți obține următorul rezultat al interogării:

marca total
Bosch 4
IKEA 5
LG 2
Smartflower 1

De asemenea, puteți redenumi coloanele existente. Să luăm una dintre interogările utilizate anterior și să adăugăm nume noi coloanelor.

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

Veți obține următorul rezultat al interogării:

product_id numele produsului Preț
2 Scaun 5.00
8 Lampă 15.00