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;
SQLite Group By 案例

SQLite count函数结合 Group By 语句
以下语句返回专辑 id 和每张专辑的曲目数。它使用 GROUP BY 子句按专辑对曲目进行分组,并将 COUNT() 函数应用于每个组。
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;

您可以使用 ORDER BY 子句对组进行排序,如下所示:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;

SQLite GROUP BY 和 INNER JOIN 子句
您可以使用 INNER JOIN 子句从多个表中查询数据,然后使用 GROUP BY 子句将行分组为一组摘要行。
例如,以下语句将曲目表与专辑表连接起来以获取专辑的标题,并使用带有 COUNT 函数的 GROUP BY 子句来获取每个专辑的曲目数。

SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;

带有 HAVING 子句的 SQLite GROUP BY
要过滤组,请使用带有 HAVING 子句的 GROUP BY。例如,要获取包含超过 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;

SQLite GROUP BY 子句与 SUM 函数示例
您可以使用 SUM 函数计算每个组的总数。例如,要获取每张专辑的总长度和字节数,您可以使用 SUM 函数计算总毫秒数和字节数。
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;

SQLite GROUP BY 带有 MAX、MIN 和 AVG 函数
以下语句返回曲目表中的专辑 ID、专辑标题、最大长度、最小长度和曲目的平均长度。
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;

SQLite GROUP BY 多列示例
在前面的例子中,我们在 GROUP BY 子句中使用了一列。SQLite 允许您按多列对行进行分组。
例如,要按媒体类型和流派对曲目进行分组,可以使用以下语句:
SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;

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;
输出:

在这个例子中:
- 函数STRFTIME('%Y', InvoiceData) 返回一个年份字符串。
- GROUP BY 子句按年份对发票进行分组。
- 函数 COUNT() 返回每年(或每组)的发票数量。
在本教程中,您学习了如何使用 SQLite GROUP BY 子句将行分组为一组摘要行。
浙公网安备 33010602011771号