查询语句 group by 分组
查询语句 group by 分组
建表语句在最后
- group by 关键字可以根据一个或多个字段对查询结果进行分组
- group by 一般都会结合Mysql聚合函数来使用
- 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且 where 是在 group by 之前执行的
group by 的语法格式
GROUP BY <字段名>[,<字段名>,<字段名>]
先确认测试表里有什么数据,方便后面例子对比
group by 单字段分组例子
对 sex 单个字段进行分组查询
ALTER TABLE test_table MODIFY username varchar(255) AFTER sex;SELECT * FROM test_table GROUP BY sex;
知识点
分组之后,只会返回组内第一条数据;具体原理可看下图
group by 多字段分组例子
先按照 age 分组,在按照 department 分组
SELECT * FROM test_table GROUP BY department,age;
知识点
- 多个字段分组查询时,先按照第一个字段分组,如果第一个字段有相同值,则把分组结果再按第二个字段进行分组,以此类推
- 如果第一个字段每个值都是唯一的,则不会按照第二个字段在进行分组了,具体原理可看下图
group by + group_concat()的例子
group_concat() 可以将分组后每个组内的值显式出来
SELECT department,GROUP_CONCAT(username) AS '部门员工姓名' FROM test_table GROUP BY department;
可以看到,按department部门分组,然后查看每个部门都有哪些员工的名字;还是很便捷的
group by + 聚合函数的例子
- 统计记录的条数
- sum() :字段值的总和
- max() :字段值的最大值
- min() :字段值的最小值
- avg() :字段值的平均值
具体的例子
SELECT department,COUNT(*) FROM test_table GROUP BY department;
#效果一样
SELECT department,COUNT(1) FROM test_table GROUP BY department;SELECT department,SUM(age) FROM test_table GROUP BY department;SELECT department,MAX(age) FROM test_table GROUP BY department;SELECT department,MIN(age) FROM test_table GROUP BY department;SELECT department,AVG(age) FROM test_table GROUP BY department;
group by + with rollup的例子
with rollup 用来在所有的记录的最后加上一条记录,显示上面所以记录每个字段的总和(直接看例子)
SELECT GROUP_CONCAT(username) FROM test_table GROUP BY department WITH ROLLUP;
SELECT department,GROUP_CONCAT(username) FROM test_table GROUP BY department WITH ROLLUP;
SELECT department,SUM(age) FROM test_table GROUP BY department WITH ROLLUP;
SELECT department,COUNT(*) FROM test_table GROUP BY department WITH ROLLUP;
CREATE TABLE `test_table` (`id` int(10) NOT NULL,`sex` varchar(20) DEFAULT NULL,`department` varchar(20) DEFAULT NULL,`age` int(10) DEFAULT NULL,`height` int(10) DEFAULT NULL,`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`username` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (1, '男', '钱', 'a', 18, 175, '2021-10-14 10:15:51');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (2, '男', '李', 'a', 23, 170, '2021-10-14 10:19:44');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (3, '女', '王', 'b', 14, 185, '2021-10-14 10:19:52');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (4, '男', '张', 'c', 21, 180, '2021-10-14 10:19:55');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (5, '女', '谢', 'd', 18, 160, '2021-10-14 10:19:58');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (6, '女', '郭', 'b', 13, 165, '2021-10-14 10:20:14');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (7, '男', '陈', 'a', 19, 162, '2021-10-14 10:20:18');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (8, '男', '任', 'd', 20, 178, '2021-10-14 10:27:04');
查询语句 group by 分组相关推荐
- mysql分组查询和子查询语句_6.MySQL分组聚合查询,子查询
自己的MySQL阅读笔记,持续更新,直到看书结束. 数据库技术可以有效帮助一个组织或者企业科学.有效的管理数据,也是现在很多企业招聘数据分析师的必备要求之一. 大家如果看过MySQL的书,也可以看我的 ...
- SQL查询语句 group by后, 字符串合并
合并列值 --******************************************************************************************* 表 ...
- Hive基础09、HQL查询语句
Hive基础09.HQL查询语句 目录 Hive基础08.HQL查询语句 1.基础查询语句 2.数组查询 3.map 4.struct 5.聚合查询语句 HQL查询内容全: 第一部分: Hive查询语 ...
- mysql 查询语句_SQL语言mysql基础查询语句
单表查询.条件查询.查询并排序.限制结果查询.查询并排名.分组聚合查询.······ -- DQL操作,数据基本查询语言使用-------------------------------------- ...
- oracle简单查询语句
学习oracle数据库也有一段时间了,现在将一些前期的总结再拿出来总结一下,希望能对初学习或自学的朋友有一定的帮助. 所需的表: (以下操作只涉及到ORACLE数据库中的emp表,如果没有表的朋友可以 ...
- sql server数据库 T-SQL查询语句(基本篇)
接上篇sql server 数据库增删改查(库与表) 删除数据 delete 表名 where 查询条件 T-sql查询语句 T-sql语句 增强版的sql语句,增加了更多的函数应用,流程控制,变量说 ...
- mysql查询前5000条记录分页显示_数据库 完整的查询语句,查询顺序及分页显示功能...
基本的查询语句 select (* | 字段名 | 四则运算 | 聚合函数) from 表名称; 取别名 当字段名显示较长时 可以添加别名 select 字段名 as 别名 from 表名称; ...
- java SQL查询语句
SQL查询语句 聚合函数 分组查询 查询指定字段信息 select 字段1,字段2,-from 表名; 例如: select id,name from zhangwu; 查询表中所有字段 select ...
- SQL查询语句执行顺序详解
查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE.UPDATE)的基础.当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作.因此基于SELE ...
- hive 语句总结_HiveQL查询语句总结
本文写作目的是整理出一份带注释的cheatsheet.内容组织形式为查询语句,实例,原理浅析. 基本查询语句 show databases; create database retail; use r ...
最新文章
- php列表显示教程,Dedecms后台管理文档列表显示自定义字段方法教程
- 如何获得PMP认证证书
- 实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验
- Android Service、IntentService,Service和组件间通信
- 联想服务器重装2008,联想ThinkSystem机器安装2008R2详细教程
- 在 SELECT 查询中使用分组集
- AI 医生“战疫”在前线
- [ERROR] InnoDB: Write to file (merge)failed at offset 4249878528, 1048576 bytes should have been wri
- 高端游戏计算机配置,高端电脑:万元游戏主机配置推荐,从此告别卡顿!
- 一文带你认清云服务器和轻量应用服务器的区别
- 漫漫学习路——计算机专业学习经验记录
- win32 WaitCommEvent
- Java8新特性之空指针异常的克星Optional类
- 版图DRC The following products could not be licensed sufficiently:- Calibre Interactive
- TemplateDoesNotExist错误之伤
- 什么是BeautifulSoup
- Android APP开发框架选择——JSBridge既个人心得和技巧
- C/C++中遍历cJSON数据
- 字符串abcd逆序c语言,c编写:输入一个字符串以回车符为结束,将其逆序重新存放。例如abcde变为edcba...
- 明日之后哪个服务器最多主播,明日之后:主播成游戏最大毒瘤,玩家列举三大“罪状”,很真实!...