mysql分组查询有什么用

什么是分组查询?将查询结果按照1个或多个字段进行分组,字段值相同的为一组

其实就是按照某一列进行分类分组使用SELECT gender from employee GROUP BY gender;

根据gender字段来分组,gender字段的全部值只有两个(‘男’和’女’),所以分为了两组

当group by单独使用时,只显示出每一组的第一条记录

所以group by单独使用时的实际意义不大对这个表进行GROUP BY操作

SELECT * FROM employee;

只显示了每一组第一条记录

男生的第一个人是张三 女生的第一个人是王五

所以说GROUP BY 一般不单独使用

一般来说 你按照什么分组 就查询什么东西

比如:

select department from employee group by department;

查询结果如上。

分完组然后呢?如何对分组后的结果进行查询?

关键字:group_concat()

将职员表 按照部门分组 查询每个部门职员的姓名

select department,group_concat(name) from employee group by department;

结果如下:GROUP BY + 聚合函数

for example:

将职员表 按照部门分组 查询每个部门职员的薪水 和 薪水总数

select department,group_concat(salary),sum(salary) from employee group by department;查询每个部门的名称 以及 每个部门的人数

select department,group_concat(name),count(*) from employee group by department;查询每个部门的部门名称 以及 每个部门工资大于1500的人数

PS:先把大于1500的人查出来 再做分组

select department,group_concat(salary),count(*) from employee group by department;

group by + having用来分组查询后制定一些条件来输出查询结果

having的作用和where一样,但having只能用于group by

查询工资总和大于9000的部门名称以及工资和

SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee

GROUP BY department HAVING SUM(salary) > 9000;having和where的区别having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having后面可以使用分组函数(统计函数)

where后面不可以使用分组函数

where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束

查询工资和大于2000的 工资总和大于6000的部门名称以及工资和

SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee

WHERE salary > 2000

GROUP BY department

HAVING SUNM(salary) > 9000

ORDER BY SUM(salary) DESC;

//降序排列

书写顺序

Limit的使用

SELECT * FROM employee LIMIT 3,3;

从第三行开始 取三条数据

PS:行是从0开始数的

limit可以用于分页操作

相关资源:MySQL分组查询GroupBy实现原理详解-其它代码类资源
什么是分组查询?将查询结果按照1个或多个字段进行分组,字段值相同的为一组

其实就是按照某一列进行分类分组使用SELECT gender from employee GROUP BY gender;

根据gender字段来分组,gender字段的全部值只有两个(‘男’和’女’),所以分为了两组

当group by单独使用时,只显示出每一组的第一条记录

所以group by单独使用时的实际意义不大对这个表进行GROUP BY操作

SELECT * FROM employee;

只显示了每一组第一条记录

男生的第一个人是张三 女生的第一个人是王五

所以说GROUP BY 一般不单独使用

一般来说 你按照什么分组 就查询什么东西

比如:

select department from employee group by department;

查询结果如上。

分完组然后呢?如何对分组后的结果进行查询?

关键字:group_concat()

将职员表 按照部门分组 查询每个部门职员的姓名

select department,group_concat(name) from employee group by department;

结果如下:GROUP BY + 聚合函数

for example:

将职员表 按照部门分组 查询每个部门职员的薪水 和 薪水总数

select department,group_concat(salary),sum(salary) from employee group by department;查询每个部门的名称 以及 每个部门的人数

select department,group_concat(name),count(*) from employee group by department;查询每个部门的部门名称 以及 每个部门工资大于1500的人数

PS:先把大于1500的人查出来 再做分组

select department,group_concat(salary),count(*) from employee group by department;

group by + having用来分组查询后制定一些条件来输出查询结果

having的作用和where一样,但having只能用于group by

查询工资总和大于9000的部门名称以及工资和

SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee

GROUP BY department HAVING SUM(salary) > 9000;having和where的区别having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having后面可以使用分组函数(统计函数)

where后面不可以使用分组函数

where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束

查询工资和大于2000的 工资总和大于6000的部门名称以及工资和

SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee

WHERE salary > 2000

GROUP BY department

HAVING SUNM(salary) > 9000

ORDER BY SUM(salary) DESC;

//降序排列

书写顺序

Limit的使用

SELECT * FROM employee LIMIT 3,3;

从第三行开始 取三条数据

PS:行是从0开始数的

limit可以用于分页操作

相关资源:MySQL分组查询GroupBy实现原理详解-其它代码类资源

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值