3.1 GROUP BY-uttalande
SQL-språket är mycket kraftfullt. Förutom enkel datahämtning låter den dig gruppera data vid frågetillfället. Vi vill till exempel veta hur många typer av produkter av varje märke vi har, hur kan vi göra det?
Det finns en speciell operatör för detta GROUP BY
, så här skrivs det.
GROUP BY column
Låt oss skriva en fråga som ber SQL att visa antalet produkttyper för varje varumärke. En sådan begäran skulle se ut ungefär så här:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Du får följande frågeresultat:
varumärke | räkna(*) |
---|---|
(NULL) | 2 |
Bosch | 4 |
IKEA | 6 |
LG | 2 |
Smartflower | 1 |
Låt oss noggrant analysera vilken typ av begäran vi skrev och vilken typ av resultat vi fick. Som ett resultat ser vi två kolumner. Den första med en lista över varumärken, vilket är logiskt. Vi ville få något som en uppsättning par "varumärke --> kvantitet" .
Observera att bland varumärkena finns ett ord NULL
. Vi har faktiskt produkter i varumärket där det står skrivet , NULL
och vi ser dem här. Lite oväntat, men hjälpsamt. Vi kan se hur många omärkta produkter det finns.
Låt oss nu titta närmare på begäran. Vi ville veta antalet produkter för varje märke, så vi skrev , GROUP BY brand
och i SELECT
skrev vi varumärke och uttryckCOUNT(*)
COUNT(*)
är en så kallad aggregatfunktion som utförs på en grupp rader. I vårt fall räknar hon helt enkelt deras antal. Det finns många sådana funktioner, och vi kommer att titta på dem lite senare.
3.2 Komplexa frågor med GROUP BY
Låt oss nu skriva en fråga där vi först kastar produkter vars pris är lägre än 10 och sedan grupperar dem. En sådan begäran skulle se ut ungefär så här:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Du får följande frågeresultat:
varumärke | räkna(*) |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Smartflower | 1 |
Alla NULL-produkter försvann från vår resultattabell, eftersom de var mycket billiga, och antalet IKEA-produkter minskade med 1. Från 6 till 5.
Detta föreslår att du först använder WHERE
de önskade raderna för att filtrera, och först sedan tillämpar grupperingen på resultatet.
3.3 Kolumnnamn på resultatet
Förresten, du kan ge namn till de resulterande kolumnerna. Ser du hur servern föreslog namnet count(*)
? Låt oss ersätta det med totalt. En sådan begäran skulle se ut ungefär så här:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Du får följande frågeresultat:
varumärke | total |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
Smartflower | 1 |
Du kan också byta namn på befintliga kolumner. Låt oss ta en av de tidigare använda frågorna och lägga till nya namn i kolumnerna.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Du får följande frågeresultat:
Serienummer | produktnamn | pris |
---|---|---|
2 | Stol | 5.00 |
8 | Lampa | 15.00 |
GO TO FULL VERSION