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 , NULLoch 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 brandoch i SELECTskrev 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 WHEREde ö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