Skip to main content

SQLite聚合函数:聚合函数的基本指南

SQLite聚合函数概述

聚合函数对一组行进行操作,并返回单个结果。聚合函数通常与GROUP BY结合使用,并在SELECT语句中包含子句。

SQLite提供以下聚合函数:

SQLite聚合函数语法

下面显示了调用聚合函数(GROUP_CONCAT()函数除外)的语法:

aggregate_function (DISTINCT | ALL expression)

在这种语法中:

单独指示聚合函数只考虑计算中的唯一值,而所有函数都允许聚合函数在计算中包含所有重复值。

下图演示了SUM()聚合函数:

SQLite Aggregate Functions

SQLite聚合函数示例

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

SQLite AVG()函数示例

下面的语句查找每个专辑所有曲目的平均长度:

SELECT
AlbumId,
ROUND(AVG(Milliseconds) / 60000 ,0) "Average In Minutes"
FROM
Tracks
GROUP BY
AlbumId;

以下是输出:

SQLite Aggregate Functions - AVG example

在本例中:

SQLite COUNT()函数示例

以下语句返回tracks表中的行数:

SELECT
COUNT(*)
FROM
tracks;

SQLite Aggregate Functions - COUNT example

要查找相册及其对应的曲目数,请使用以下语句:

SELECT
AlbumId,
COUNT(TrackId) track_count
FROM
tracks
GROUP BY
AlbumId
ORDER BY
track_count DESC;

SQLite Aggregate Functions - COUNT example 2

SQLite SUM()函数示例

以下示例使用SUM()函数以分钟为单位计算每个相册的长度:

SELECT
AlbumId,
SUM(Milliseconds) / 60000 Minutes
FROM
tracks
GROUP BY
AlbumId;

SQLite Aggregate Functions - SUM example

SQLite MAX()函数示例

要查找所有轨迹中最长的时间,请使用MAX()函数,如下所示:

SELECT
MAX(Milliseconds) / 60000 Minutes
FROM
tracks;

SQLite Aggregate Functions - MAX example

为了找到长度最长的轨迹,可以使用子查询:

SELECT
TrackId,
Name,
Milliseconds
FROM
tracks
WHERE
Milliseconds = (
SELECT
MAX(Milliseconds)
FROM
tracks);

SQLite Aggregate Functions - MAX example 2

在本例中,外部查询返回的轨迹长度等于子查询返回的所有轨迹的最长时间。

SQLite MIN()函数示例

类似地,下面的语句使用MIN()函数查找长度最短的轨迹:

SELECT
TrackId,
Name,
Milliseconds
FROM
tracks
WHERE
Milliseconds = (
SELECT
MIN(Milliseconds)
FROM
tracks);

SQLite Aggregate Functions - MIN example

SQLite GROUP_CONCAT()函数示例

下面的语句使用GROUP_CONCAT()函数返回相册id 10的曲目名称的逗号分隔列表:

SELECT
GROUP_CONCAT(name)
FROM
tracks
WHERE
AlbumId = 10;

SQLite Aggregate Functions - GROUP_CONCAT example

在本教程中,您已经了解了SQLite聚合函数,以及如何将它们应用于计算聚合。