Skip to main content

translate failed

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;

试试看

GROUP BY子句位于SELECT语句的FROM子句之后。如果语句包含WHERE子句,GROUP BY子句必须位于WHERE子句之后。

GROUP BY子句后面是一列或一列逗号分隔的列,用于指定组。

SQLite示例分组

我们使用示例数据库中的tracks表进行演示。

带有计数函数的SQLite GROUP BY子句

下面的语句返回相册id和每个相册的曲目数。它使用GROUP BY子句按唱片集对曲目进行分组,并将COUNT()函数应用于每个组。

SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;

试试看

SQLite GROUP BY with COUNT function

可以使用ORDER BY子句对组进行如下排序:

SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;

试试看

SQLite GROUP BY with COUNT function and ORDER BY clause

SQLite GROUP BY和INNER JOIN子句

可以使用内部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;

试试看

SQLite GROUP BY with INNER JOIN

SQLite GROUP BY with HAVING子句

要筛选组,请使用GROUP BY with 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;

试试看

SQLite GROUP BY with HAVING clause

SQLite GROUP BY子句和SUM函数示例

您可以使用SUM函数来计算每组的总数。例如,要获取每个相册的总长度和字节数,可以使用SUM函数计算总毫秒数和字节数。

SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;

试试看

SQLite GROUP BY with SUM function

SQLite GROUP BY具有最大值、最小值和平均值功能

下面的语句返回曲目表中曲目的专辑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 with MAX MIN AVG functions

SQLite按多列分组示例

在上一个示例中,我们在GROUP BY子句中使用了一列。SQLite允许您按多列对行进行分组。

例如,要按媒体类型和流派对曲目进行分组,请使用以下语句:

SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;

试试看

SQL GROUP BY multiple columns example

SQLite将MediaTypeId和GenreId列的值组合作为一个组使用,例如,(1,1)和(1,2)。然后应用COUNT函数返回每组中的曲目数。

SQLite按日期分组示例

请参见示例数据库中的以下发票表:

下面的语句按年份返回发票编号。

SELECT
STRFTIME('%Y', InvoiceDate) InvoiceYear,
COUNT(InvoiceId) InvoiceCount
FROM
invoices
GROUP BY
STRFTIME('%Y', InvoiceDate)
ORDER BY
InvoiceYear;

以下是输出:

SQLite GROUP BY date example

在本例中:

在本教程中,您学习了如何使用SQLite GROUP BY子句将行分组到一组摘要行中。