(数据库十四)where、having 和 group by 的常规用法

where 和 having 的区别

(1)用的地方不一样
where可以用于select、update、delete和insert 语句中;having只能用于select语句中。
(2)执行的顺序不一样
where的搜索条件是在执行语句进行分组之前应用; having的搜索条件是在分组条件后执行的。
即如果where和having一起用时,where会先执行,having后执行
(3)子句有区别
where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用合计函数(sum、count、avg、max 和 min),而 where 子句不可以。
(4)SQL标准要求 having 必须引用 group 子句中的列或用于合计函数中的列

group by 的用法

group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤。

(1) 集合函数 max

select max(user_id), grade from user_info group by grade;

将数据照grade字段分组,查询每组最大的user_id以及当前组内容。
注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

(2) having

select max(user_id),grade from user_info group by grade having grade>'A';

这条sql与上面例子中的基本相同,不过后面跟了having过滤条件。将grade不满足’>A’的过滤掉了。
注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

select max(user_id),id,grade from user_info group by grade

id 字段的选取是按照mysql存储的检索数据匹配的第一条

结论
(1)当group by 与聚合函数配合使用时,功能为分组后计算
(2)当group by 与having配合使用时,功能为分组后过滤
(3)当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值