3.1 GRUPPE FOR erklæring

SQL-språket er veldig kraftig. I tillegg til enkel datahenting, lar den deg gruppere data på spørringstidspunktet. For eksempel vil vi vite hvor mange typer produkter av hvert merke vi har, hvordan kan vi gjøre det?

Det er en spesiell operatør for dette GROUP BY, her er hvordan det er skrevet.

GROUP BY column

La oss skrive en spørring som ber SQL om å vise antall produkttyper for hvert merke. En slik forespørsel vil se omtrent slik ut:

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

Du vil få følgende søkeresultat:

merke telle(*)
(NULL) 2
Bosch 4
IKEA 6
LG 2
Smartflower 1

La oss analysere nøye hva slags forespørsel vi skrev, og hva slags resultat vi fikk. Som et resultat ser vi to kolonner. Den første med en liste over merker, som er logisk. Vi ønsket å få noe sånt som et sett med par "merke --> mengde" .

Vær oppmerksom på at blant merkenavnene er det et ord NULL. Faktisk har vi produkter i merket som det er skrevet i NULL, og vi ser dem her. Litt uventet, men nyttig. Vi kan se hvor mange umerkede produkter det er.

La oss nå se nærmere på forespørselen. Vi ønsket å vite antall produkter av hvert merke, så vi skrev GROUP BY brand, og i SELECTskrev vi merke og uttrykkCOUNT(*)

COUNT(*)er en såkalt aggregatfunksjon som utføres på en gruppe rader. I vårt tilfelle teller hun ganske enkelt nummeret deres. Det er mange slike funksjoner, og vi skal se på dem litt senere.

3.2 Komplekse søk med GROUP BY

La oss nå skrive en spørring der vi først forkaster produkter som har en pris på mindre enn 10, og deretter grupperer dem. En slik forespørsel vil se omtrent slik ut:

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

Du vil få følgende søkeresultat:

merke telle(*)
Bosch 4
IKEA 5
LG 2
Smartflower 1

Alle NULL-produkter forsvant fra resultattabellen vår, da de var veldig billige, og antallet IKEA-produkter gikk ned med 1. Fra 6 til 5.

Dette antyder at du først bruker WHEREde ønskede linjene for å filtrere, og først deretter bruker grupperingen på resultatet.

3.3 Kolonnenavn på resultatet

Forresten, du kan gi navn til de resulterende kolonnene. Ser du hvordan serveren foreslo navnet count(*)? La oss erstatte det med totalt. En slik forespørsel vil se omtrent slik ut:

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

Du vil få følgende søkeresultat:

merke Total
Bosch 4
IKEA 5
LG 2
Smartflower 1

Du kan også gi nytt navn til eksisterende kolonner. La oss ta et av de tidligere brukte spørringene og legge til nye navn i kolonnene.

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

Du vil få følgende søkeresultat:

Produkt ID Produktnavn pris
2 Stol 5.00
8 Lampe 15.00