mysql的sql语句之分组

1.分组函数

  1. 多行处理函数的特点:输入多行,最终输出一行。
count 计数 
sum 求和
avg 求平均值
max 最大值
min 最小值

注意:

1.分组函数必须在先分组,在使用。

2.如果没分组,整张表默认分为一组。

3.分组函数自动忽略null,可以计算。

4.分组函数不能直接使用在where子句中,因为select执行后,group by 已经执行了,而where执行后,group by 还没执行,违反了第一注意事项必须先分组。

案列:

# 找出最高成绩
select max(grade) from sc
# 统计多少数据
select count(grade) from sc
# 统计总行数
select count(*) from sc
# 最低成绩
select min(grade) from sc
# 平均值和四舍五入保留整数
select avg(grade) from sc
select round(avg(grade),0) from sc
#求和
select sum(grade) from sc

2. 分组查询

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

在实际操作中,可能需要,先分组,然后对每一组数据进行操作。

group by having

注意:在分组查询中select后只能是,分组函数和参加分组的字段,在mysql中不会报错,但无意义,在oracle数据库中会报错

select Sno  from sc group by Sno
select Sno,sum(grade)  from sc group by Sno
#Sno分组字段 sum 分组函数

# 每个同学不同科目的最高分
SELECT Sno,Cno,max(grade) FROM sc GROUP BY Cno,Sno

having和where的对比

列子:如找出每个部门的最高薪资,要求显示最搞薪资大于3000的?

having的方法

# 1.按部门分组,找出最大薪资
SELECT 部门,max(薪资) FROM 表名 group by 部门
# 2.大于3000的工资
SELECT 部门,max(薪资) FROM 表名 group by 部门 having max(薪资)>3000

where的方法

#1. 照出工资大于3000的
select 部门,薪资 from 表名 where 薪资>3000 group by 部门

对比这个列子中where比having更有效率.

注意:where和having优先选择where,where实在选择不了,在选择having,having智能在group by后使用

where无法使用的情况

​ 如求每个部门的平均薪资,要求显示平均薪资大于2000

问题:这个要求where后无法使用分组函数,在分组函数中有提过优先级。

总结:

select from where group by having order by

这上面的先后循序

from

where

group by

having

select

order by

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值