Shrnutí :v tomto tutoriálu se naučíte používat SQLite GROUP BY
klauzule k vytvoření sady souhrnných řádků ze sady řádků.
Úvod do SQLite GROUP BY
klauzule
GROUP BY
klauzule je volitelná klauzule SELECT
prohlášení. GROUP BY
klauzule vybrané skupiny řádků do souhrnných řádků podle hodnot jednoho nebo více sloupců.
GROUP BY
klauzule vrací jeden řádek pro každou skupinu. Pro každou skupinu můžete použít agregační funkci, například MIN
, MAX
, SUM
, COUNT
nebo AVG
poskytnout více informací o každé skupině.
Následující příkaz ilustruje syntaxi SQLite GROUP BY
doložka.
SELECT
column_1,
aggregate_function(column_2)
FROM
table
GROUP BY
column_1,
column_2;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
GROUP BY
klauzule následuje za FROM
klauzule SELECT
prohlášení. V případě, že příkaz obsahuje WHERE
klauzule GROUP BY
klauzule musí následovat za WHERE
doložka.
Po GROUP BY
klauzule je sloupec nebo seznam sloupců oddělených čárkami používaných k určení skupiny.
SQLite GROUP BY
příklady
Používáme tracks
tabulky ze vzorové databáze pro ukázku.
SQLite GROUP BY
klauzule s COUNT
funkce
Následující příkaz vrátí ID alba a počet skladeb na album. Používá GROUP BY
klauzule seskupí skladby podle alba a použije COUNT()
funkce pro každou skupinu.
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Můžete použít ORDER BY
klauzule k řazení skupin následovně:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite GROUP BY
a INNER JOIN
klauzule
Pomocí INNER JOIN
můžete dotazovat data z více tabulek klauzuli, pak použijte GROUP BY
klauzule k seskupení řádků do sady souhrnných řádků.
Například následující příkaz spojuje tracks
tabulka s albums
tabulku pro získání názvů alb a používá GROUP BY
klauzule s COUNT
funkce pro získání počtu skladeb na album.
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite GROUP BY
s HAVING
klauzule
Chcete-li filtrovat skupiny, použijte GROUP BY
s HAVING
doložka. Chcete-li například získat alba, která mají více než 15 skladeb, použijte následující příkaz:
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid
HAVING COUNT(trackid) > 15;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite GROUP BY
klauzule s SUM
příklad funkce
Můžete použít SUM
funkce pro výpočet součtu za skupinu. Chcete-li například získat celkovou délku a bajty pro každé album, použijte SUM
funkce pro výpočet celkových milisekund a bajtů.
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite GROUP BY
s MAX
, MIN
a AVG
funkce
Následující příkaz vrací ID alba, název alba, maximální délku, minimální délku a průměrnou délku skladeb v tracks
tabulka.
SELECT
tracks.albumid,
title,
min(milliseconds),
max(milliseconds),
round(avg(milliseconds),2)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite GROUP BY
příklad více sloupců
V předchozím příkladu jsme použili jeden sloupec v GROUP BY
doložka. SQLite umožňuje seskupovat řádky do více sloupců.
Například pro seskupení skladeb podle typu média a žánru použijte následující příkaz:
SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
SQLite používá kombinaci hodnot MediaTypeId
a GenreId
sloupce jako skupinu, např. (1,1) a (1,2). Poté použije COUNT
funkce pro vrácení počtu stop v každé skupině.
SQLite GROUP BY
příklad data
Podívejte se na následující tabulku faktur ze vzorové databáze:
Následující výpis vrátí číslo faktury podle let.
SELECT
STRFTIME('%Y', InvoiceDate) InvoiceYear,
COUNT(InvoiceId) InvoiceCount
FROM
invoices
GROUP BY
STRFTIME('%Y', InvoiceDate)
ORDER BY
InvoiceYear;
Code language: SQL (Structured Query Language) (sql)
Zde je výstup:
V tomto příkladu:
- Funkce
STRFTIME('%Y', InvoiceDate)
vrátí rok z řetězce data. GROUP BY
doložka seskupuje faktury podle let.- Funkce
COUNT()
vrátí číslo faktury v každém roce (nebo skupině).
V tomto tutoriálu jste se naučili používat SQLite GROUP BY
klauzule k seskupení řádků do sady souhrnných řádků.