查询语句 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 分组相关推荐

  1. mysql分组查询和子查询语句_6.MySQL分组聚合查询,子查询

    自己的MySQL阅读笔记,持续更新,直到看书结束. 数据库技术可以有效帮助一个组织或者企业科学.有效的管理数据,也是现在很多企业招聘数据分析师的必备要求之一. 大家如果看过MySQL的书,也可以看我的 ...

  2. SQL查询语句 group by后, 字符串合并

    合并列值 --******************************************************************************************* 表 ...

  3. Hive基础09、HQL查询语句

    Hive基础09.HQL查询语句 目录 Hive基础08.HQL查询语句 1.基础查询语句 2.数组查询 3.map 4.struct 5.聚合查询语句 HQL查询内容全: 第一部分: Hive查询语 ...

  4. mysql 查询语句_SQL语言mysql基础查询语句

    单表查询.条件查询.查询并排序.限制结果查询.查询并排名.分组聚合查询.······ -- DQL操作,数据基本查询语言使用-------------------------------------- ...

  5. oracle简单查询语句

    学习oracle数据库也有一段时间了,现在将一些前期的总结再拿出来总结一下,希望能对初学习或自学的朋友有一定的帮助. 所需的表: (以下操作只涉及到ORACLE数据库中的emp表,如果没有表的朋友可以 ...

  6. sql server数据库 T-SQL查询语句(基本篇)

    接上篇sql server 数据库增删改查(库与表) 删除数据 delete 表名 where 查询条件 T-sql查询语句 T-sql语句 增强版的sql语句,增加了更多的函数应用,流程控制,变量说 ...

  7. mysql查询前5000条记录分页显示_数据库 完整的查询语句,查询顺序及分页显示功能...

    基本的查询语句​ select (* | 字段名 | 四则运算 | 聚合函数) from 表名称; 取别名 当字段名显示较长时 可以添加别名​ select 字段名 as 别名 from 表名称;​ ...

  8. java SQL查询语句

    SQL查询语句 聚合函数 分组查询 查询指定字段信息 select 字段1,字段2,-from 表名; 例如: select id,name from zhangwu; 查询表中所有字段 select ...

  9. SQL查询语句执行顺序详解

    查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE.UPDATE)的基础.当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作.因此基于SELE ...

  10. hive 语句总结_HiveQL查询语句总结

    本文写作目的是整理出一份带注释的cheatsheet.内容组织形式为查询语句,实例,原理浅析. 基本查询语句 show databases; create database retail; use r ...

最新文章

  1. php列表显示教程,Dedecms后台管理文档列表显示自定义字段方法教程
  2. 如何获得PMP认证证书
  3. 实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验
  4. Android Service、IntentService,Service和组件间通信
  5. 联想服务器重装2008,联想ThinkSystem机器安装2008R2详细教程
  6. 在 SELECT 查询中使用分组集
  7. AI 医生“战疫”在前线
  8. [ERROR] InnoDB: Write to file (merge)failed at offset 4249878528, 1048576 bytes should have been wri
  9. 高端游戏计算机配置,高端电脑:万元游戏主机配置推荐,从此告别卡顿!
  10. 一文带你认清云服务器和轻量应用服务器的区别
  11. 漫漫学习路——计算机专业学习经验记录
  12. win32 WaitCommEvent
  13. Java8新特性之空指针异常的克星Optional类
  14. 版图DRC The following products could not be licensed sufficiently:- Calibre Interactive
  15. TemplateDoesNotExist错误之伤
  16. 什么是BeautifulSoup
  17. Android APP开发框架选择——JSBridge既个人心得和技巧
  18. C/C++中遍历cJSON数据
  19. 字符串abcd逆序c语言,c编写:输入一个字符串以回车符为结束,将其逆序重新存放。例如abcde变为edcba...
  20. 明日之后哪个服务器最多主播,明日之后:主播成游戏最大毒瘤,玩家列举三大“罪状”,很真实!...

热门文章

  1. 一、java入门(高琪java300集+java从入门到精通笔记)
  2. 基于Spark的公安大数据实时运维技术实践
  3. WINDOWS 7 X86专业版SP1后续补丁包20150901(微软官方下载地址列表)
  4. 测试基础知识1 》》软件测试入门
  5. 程序员在体制内的工作与生活是怎样的?
  6. Windows C编程中Win7隐藏任务栏图标方法
  7. 爬取链家任意城市租房数据(北京朝阳)
  8. tableau必知必会之学做两个集合的维恩图(文氏图)Venn diagram
  9. 关于Bundle Adjustment(BA)的直观理解
  10. 影响虚拟主机访问速度的因素,主要有哪些?