一、简介
- 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