Резюме :в този урок ще научите как да използвате 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
клауза за групиране на редове в набор от обобщени редове.