SQLite Having
摘要:在本教程中,您将学习如何使用 SQLite HAVING 子句为组或聚合指定过滤条件。
引入SQLite Having 子句
SQLite HAVING 子句是 SELECT 语句的可选子句。HAVING 子句指定组的搜索条件。
您经常将 HAVING 子句与 GROUP BY 子句一起使用。GROUP BY 子句将一组行分组为一组汇总行或组。然后,HAVING 子句根据指定条件筛选组。
如果使用 HAVING 子句,则必须包含 GROUP BY 子句;否则,将出现以下错误:
Error: a GROUP BY clause is required before HAVING
请注意,HAVING 子句在 GROUP BY 子句之后应用,而 WHERE 子句在 GROUP BY 子句之前应用。
SELECT
column_1,
column_2,
aggregate_function (column_3)
FROM
table
GROUP BY
column_1,
column_2
HAVING
search_condition;
在此语法中,HAVING 子句将每个组的 search_condition 评估为布尔表达式。只有评估结果为真时,才会在最终结果集中包含该组。
SQLite HAVING 子句案例
我们将使用示例数据库中的 tracks 表进行演示。

要查找每张专辑的曲目数,可以使用 GROUP BY 子句,如下所示:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;

为了查找 ID 为 1 的专辑的曲目数量,我们在以下语句中添加 HAVING 子句:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
HAVING albumid = 1;

我们在 HAVING 子句中引用了 AlbumId 列。
要查找曲目数在 18 到 20 之间的专辑,可以使用 HAVING 子句中的聚合函数,如以下语句所示:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
HAVING
COUNT(albumid) BETWEEN 18 AND 20
ORDER BY albumid;

带有 INNER JOIN 示例的 SQLite HAVING 子句
以下语句使用内连接从曲目tracks和专辑表albums中查询数据,以查找总长度大于 60,000,000 毫秒的专辑。
SELECT
tracks.AlbumId,
title,
SUM(Milliseconds) AS length
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.AlbumId
GROUP BY
tracks.AlbumId
HAVING
length > 60000000;

在本教程中,您学习了如何使用 SQLite HAVING 子句指定组的搜索条件。
浙公网安备 33010602011771号