3.1 GRUPPER FOR erklæring

SQL-sproget er meget kraftfuldt. Ud over simpel datahentning giver det dig mulighed for at gruppere data på forespørgselstidspunktet. For eksempel vil vi gerne vide, hvor mange slags produkter af hvert mærke vi har, hvordan kan vi gøre det?

Der er en speciel operatør til dette GROUP BY, her er hvordan det er skrevet.

GROUP BY column

Lad os skrive en forespørgsel, der beder SQL om at vise antallet af produkttyper for hvert mærke. En sådan anmodning ville se sådan ud:

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

Du får følgende forespørgselsresultat:

mærke tælle(*)
(NUL) 2
Bosch 4
IKEA 6
LG 2
Smartflower 1

Lad os omhyggeligt analysere, hvilken slags anmodning vi skrev, og hvilken slags resultat vi fik. Som et resultat ser vi to kolonner. Den første med en liste over mærker, hvilket er logisk. Vi ønskede at få noget som et sæt par "mærke --> antal" .

Bemærk venligst, at der blandt mærkenavnene er et ord NULL. Faktisk har vi produkter i det mærke, som det er skrevet i NULL, og vi ser dem her. Lidt uventet, men hjælpsomt. Vi kan se, hvor mange umærkede produkter, der er.

Lad os nu se nærmere på anmodningen. Vi ville gerne vide antallet af produkter af hvert mærke, så vi skrev GROUP BY brand, og i SELECTskrev vi mærke og udtrykketCOUNT(*)

COUNT(*)er en såkaldt aggregeret funktion, der udføres på en række rækker. I vores tilfælde tæller hun simpelthen deres antal. Der er mange sådanne funktioner, og dem vil vi se på lidt senere.

3.2 Komplekse forespørgsler med GROUP BY

Lad os nu skrive en forespørgsel, hvor vi først kasserer produkter, hvis pris er mindre end 10, og derefter grupperer dem. En sådan anmodning ville se sådan ud:

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

Du får følgende forespørgselsresultat:

mærke tælle(*)
Bosch 4
IKEA 5
LG 2
Smartflower 1

Alle NULL-produkter forsvandt fra vores resultattabel, da de var meget billige, og antallet af IKEA-produkter faldt med 1. Fra 6 til 5.

Dette foreslår, at du først anvender WHEREde ønskede linjer til filtrering og først derefter anvender grupperingen på resultatet.

3.3 Kolonnenavne på resultatet

Forresten kan du give navne til de resulterende kolonner. Kan du se, hvordan serveren foreslog navnet count(*)? Lad os erstatte det med total. En sådan anmodning ville se sådan ud:

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

Du får følgende forespørgselsresultat:

mærke Total
Bosch 4
IKEA 5
LG 2
Smartflower 1

Du kan også omdøbe eksisterende kolonner. Lad os tage en af ​​de tidligere brugte forespørgsler og tilføje nye navne til kolonnerne.

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

Du får følgende forespørgselsresultat:

produkt_id produktnavn pris
2 Stol 5.00
8 Lampe 15.00