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

SQLite Group By

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;

SQLite Group By 案例

image

SQLite count函数结合 Group By 语句

以下语句返回专辑 id 和每张专辑的曲目数。它使用 GROUP BY 子句按专辑对曲目进行分组,并将 COUNT() 函数应用于每个组。

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

image

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


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

image

SQLite GROUP BY 和 INNER JOIN 子句

您可以使用 INNER JOIN 子句从多个表中查询数据,然后使用 GROUP BY 子句将行分组为一组摘要行。

例如,以下语句将曲目表与专辑表连接起来以获取专辑的标题,并使用带有 COUNT 函数的 GROUP BY 子句来获取每个专辑的曲目数。

image


SELECT
	tracks.albumid,
	title,
	COUNT(trackid)
FROM
	tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
	tracks.albumid;

image

带有 HAVING 子句的 SQLite GROUP BY

要过滤组,请使用带有 HAVING 子句的 GROUP BY。例如,要获取包含超过 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;

image

SQLite GROUP BY 子句与 SUM 函数示例

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

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

image

SQLite GROUP BY 带有 MAX、MIN 和 AVG 函数

以下语句返回曲目表中的专辑 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;

image

SQLite GROUP BY 多列示例

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

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


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

image

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

SQLite GROUP BY 日期示例

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

image

以下语句按年份返回发票数量。

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

输出:

image

在这个例子中:

  • 函数STRFTIME('%Y', InvoiceData) 返回一个年份字符串。
  • GROUP BY 子句按年份对发票进行分组。
  • 函数 COUNT() 返回每年(或每组)的发票数量。

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

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