group by:按照某个字段或者某些字段进行分组。
having:对分组之后的数据进行再次过滤,having必须和group by一起用,且在group by后面。
比如person表如下(以下查询均基于此表):
1.group by 用法:对某个或某些字段进行分组
对sex字段进行分组时:
select sex from test.person group by sex;
也可对多个字段进行分组,比如对sex和age同时分组。此时我们的数据如下:
select sex, age from test.person group by sex, age;
从上面结果来看,某种意义上,是和distinct功能类似。
所以,在更多时候,group by是和分组函数(count、sum、avg、max、min) 联合使用的,需要注意的是,任何一个分组函数都是在group by执行结束后才会执行的。
eg,要查询男、女分组下的最大年龄,与max函数联合使用:
select sex,max(age) from test.person group by sex;
select sex, count(sex) from test.person group by sex;
2.接下来就要说having的使用了 :having是对分组数据的筛选。
eg,要查询人数大于1的分组,使用having筛选时,要写到group by后面
select sex from test.person group by sex having count(sex) > 1 ;
select sex from test.person where age < 21 group by sex;
执行结果如下:
由此可见,where语句是在分组之前执行的。总结where和having的区别就是:
having | where |
---|---|
1.分组之前执行 2.后面不能再跟max,min,count等聚合函数(因为where的执行顺序大于聚合函数) 3.过滤的是原表的数据,过滤掉的数据,不参与分组 | 1.分组之后执行 2.后面不能再跟max,min,count等聚合函数 3.过滤的是分组后的数据 4.支持所有WHERE操作符 |
原文地址:https://blog.csdn.net/c_xiazai12345/article/details/134650231
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_1257.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。