mysql 分组查询 语句_MySQL分组查询

MySQL分组查询

分组查询主要涉及到两个子句,分别是:group by和having。

group by

● 取得每个工作岗位的工资合计,要求显示岗位名称和工资合计

select job, sum(sal) from emp group by job;

a6f3296a3a7e597ab1f65819da93afab.png

如果使用了order by,order by必须放到group by后面

114bf8dc90dadccd498f1a32c839bd00.png

● 按照工作岗位和部门编码分组,取得的工资合计

1、原始数据

470fca9b4c1d0d5c17a37b4edad6a60d.png

2、分组语句

select job,deptno,sum(sal) from emp group by job,deptno;

fd3eb26858810bb87c84365be3963737.png

mysql> select empno,deptno,avg(sal) from emp group by deptno;

+-------+--------+-------------+

| empno | deptno | avg(sal)    |

+-------+--------+-------------+

|  7782 |     10 | 2916.666667 |

|  7369 |     20 | 2175.000000 |

|  7499 |     30 | 1566.666667 |

+-------+--------+-------------+

以上SQL语句在Oracle数据库中无法执行,执行报错。

以上SQL语句在Mysql数据库中可以执行,但是执行结果矛盾。

在SQL语句中若有group by 语句,那么在select语句后面只能跟分组函数+参与分组的字段。

having

如果想对分组数据再进行过滤需要使用having子句;

取得每个岗位的平均工资大于2000;

select job, avg(sal) from emp group by jobhaving avg(sal) >2000;

ee9b9a8f1c66815e8e056ea3eba8a418.png

分组函数的执行顺序:

● 根据条件查询数据

● 分组

● 采用having过滤,取得正确的数据

select语句总结

一个完整的select语句格式如下:

select 字段

from 表名

where …….

group by ……..

having …….(就是为了过滤分组后的数据而存在的—不可以单独的出现)

order by ……..

以上语句的执行顺序

● 首先执行where语句过滤原始数据

● 执行group by进行分组

● 执行having对分组数据进行操作

● 执行select选出数据

● 执行order by排序

原则:能在where中过滤的数据,尽量在where中过滤,效率较高。having的过滤是专门对分组之后的数据进行过滤的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值