• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

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 表进行演示。

image

要查找每张专辑的曲目数,可以使用 GROUP BY 子句,如下所示:


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

image

为了查找 ID 为 1 的专辑的曲目数量,我们在以下语句中添加 HAVING 子句:


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

image

我们在 HAVING 子句中引用了 AlbumId 列。

要查找曲目数在 18 到 20 之间的专辑,可以使用 HAVING 子句中的聚合函数,如以下语句所示:


SELECT
   albumid,
   COUNT(trackid)
FROM
   tracks
GROUP BY
   albumid
HAVING 
   COUNT(albumid) BETWEEN 18 AND 20
ORDER BY albumid;

image

带有 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;

image

在本教程中,您学习了如何使用 SQLite HAVING 子句指定组的搜索条件。

posted @ 2024-08-06 23:32  编织快乐  阅读(46)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3