王京 的个人博客

记录精彩的程序人生

  menu
44 文章
0 浏览
2 当前访客
ღゝ◡╹)ノ❤️

MySQL学习整理(GROUP BY 语句)

一、简介

  • GROUP BY 语句根据一个或多个列对结果集进行分组。
  • 在分组的列上我们可以使用 COUNT, SUM, AVG 等函数

二、语法

SELECT queryitem, function(queryitem)
FROM table
WHERE ...
GROUP BY queryitem;

语法解析:

  • queryitem1 排序列,可以多个
  • function 方法,如:COUNT, SUM, AVG

三、实例演示(结合 WITH ROLLUP 使用)

3.1、导入数据

-- 创建表
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_bin DEFAULT '姓名',
  `sign_in_date` datetime DEFAULT NULL COMMENT '签到时间',
  `sign_in_count` int(11) DEFAULT 1 COMMENT '签到次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;


-- 插入数据
INSERT INTO `test`(name, sign_in_date, sign_in_count) 
VALUES 
('小明', '2021-11-22 00:00:00', 1),
('小王', '2021-11-22 00:00:00', 2),
('小丽', '2021-11-22 00:00:00', 3), 
('小明', '2021-11-23 00:00:00', 4),
('小王', '2021-11-23 00:00:00', 5),
('小丽', '2021-11-23 00:00:00', 6), 
('小明', '2021-11-24 00:00:00', 7),
('小王', '2021-11-25 00:00:00', 8),
('小明', '2021-11-26 00:00:00', 9);

效果图:

****编辑

3.2、查询打卡天数

-- 打卡天数
SELECT NAME, count(1) FROM test GROUP BY NAME;

效果:

3.3、查询打卡次数(WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…))

-- 打卡次数
SELECT NAME, SUM( sign_in_count ) AS countSum FROM test GROUP BY NAME WITH ROLLUP;

效果(其中 NAME IS NULL 表示所有人的登录次数《总登陆次数》):

****编辑

3.4、coalesce 替换 3.2 中的 NUll 的名称

-- 打卡次数
SELECT COALESCE( NAME, '总数' ), SUM( sign_in_count ) AS countSum FROM test GROUP BY NAME WITH ROLLUP;

效果:

****编辑

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!


标题:MySQL学习整理(GROUP BY 语句)
作者:wangjing
地址:https://www.codedblogs.cn/articles/2024/04/12/1712905076295.html