Резюме :в този урок ще научите как да използвате SQLite GROUP BY клауза за създаване на набор от обобщени редове от набор от редове.
Въведение в SQLite GROUP BY клауза
GROUP BY клаузата е незадължителна клауза на SELECT изявление. GROUP BY клауза избрана група от редове в обобщени редове по стойности на една или повече колони.
GROUP BY клаузата връща един ред за всяка група. За всяка група можете да приложите агрегатна функция като MIN , MAX , SUM , COUNT или AVG за да предоставите повече информация за всяка група.
Следното изявление илюстрира синтаксиса на SQLite GROUP BY клауза.
SELECT
column_1,
aggregate_function(column_2)
FROM
table
GROUP BY
column_1,
column_2;
Code language: SQL (Structured Query Language) (sql) Опитайте го
GROUP BY клаузата идва след FROM клауза на SELECT изявление. В случай, че изявление съдържа WHERE клауза, GROUP BY клаузата трябва да идва след WHERE клауза.
Следвайки GROUP BY клаузата е колона или списък с колони, разделени със запетая, използвани за определяне на групата.
SQLite GROUP BY примери
Използваме tracks таблица от примерната база данни за демонстрацията.
SQLite GROUP BY клауза с COUNT функция
Следното изявление връща идентификатора на албума и броя на песните на албум. Той използва GROUP BY клауза за групиране на песни по албум и прилага COUNT() функция за всяка група.
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Опитайте го
Можете да използвате ORDER BY клауза за сортиране на групите, както следва:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;Code language: SQL (Structured Query Language) (sql) Опитайте го
SQLite GROUP BY и INNER JOIN клауза
Можете да заявите данни от множество таблици, като използвате INNER JOIN клауза, след което използвайте GROUP BY клауза за групиране на редове в набор от обобщени редове.
Например, следният оператор се присъединява към tracks таблица с albums таблица, за да получите заглавията на албума и използва GROUP BY клауза с COUNT функция за получаване на броя песни на албум.

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) Опитайте го
SQLite GROUP BY с HAVING клауза
За да филтрирате групи, използвате GROUP BY с HAVING клауза. Например, за да получите албумите, които имат повече от 15 песни, използвате следното изявление:
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) Опитайте го
SQLite GROUP BY клауза с SUM пример за функция
Можете да използвате SUM функция за изчисляване на общата сума за група. Например, за да получите обща дължина и байтове за всеки албум, използвате SUM функция за изчисляване на общите милисекунди и байтове.
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Опитайте го
SQLite GROUP BY с MAX , MIN и AVG функции
Следното изявление връща идентификатора на албума, заглавието на албума, максималната дължина, минималната дължина и средната дължина на песните в tracks таблица.
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) Опитайте го
SQLite GROUP BY пример с множество колони
В предишния пример използвахме една колона в GROUP BY клауза. SQLite ви позволява да групирате редове по множество колони.
Например, за да групирате песни по тип и жанр на медия, използвате следното изявление:
SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;Code language: SQL (Structured Query Language) (sql) Опитайте го
SQLite използва комбинацията от стойности на MediaTypeId и GenreId колони като група, напр. (1,1) и (1,2). След това прилага COUNT функция за връщане на броя на песните във всяка група.
SQLite GROUP BY пример за дата
Вижте следната таблица с фактури от примерната база данни:
Следното извлечение връща броя на фактурата по години.
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) Ето изхода:
В този пример:
- Функцията
STRFTIME('%Y', InvoiceDate)връща година от низ от дата. GROUP BYклаузата групира фактурите по години.- Функцията
COUNT()връща броя на фактурата за всяка година (или група).
В този урок научихте как да използвате SQLite GROUP BY клауза за групиране на редове в набор от обобщени редове.