SQLite HAVING子句及实例
SQLite HAVING子句简介
SQLite HAVING子句是SELECT语句的可选子句。HAVING子句指定组的搜索条件。
你经常在GROUP BY子句中使用HAVING子句。GROUP BY子句将一组行分组为一组摘要行或组。然后HAVING子句根据指定的条件过滤组。
如果使用HAVING子句,则必须包含groupby子句;否则,将出现以下错误:
Error: a GROUP BY clause is required before HAVING
注意HAVING子句在groupby子句之后应用,而WHERE子句在groupby子句之前应用。
下面说明HAVING子句的语法:
SELECT
column_1,
column_2,
aggregate_function (column_3)
FROM
table
GROUP BY
column_1,
column_2
HAVING
search_condition;
在这种语法中,HAVING子句将每个组的搜索条件作为布尔表达式进行计算。如果评估结果为真,它只在最终结果集中包含一个组。
SQLite有子句示例
我们将使用示例数据库中的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;
试试看
SQLite HAVING子句与内部连接示例
下面的语句使用内部联接查询曲目和相册表中的数据,以查找总长度大于60000000毫秒的相册。
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子句来指定组的搜索条件。