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 SELECT
skrev 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 WHERE
de ø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 |
GO TO FULL VERSION