mysql 高级分组函数_Mysql原生语句高级运用技巧

原标题:Mysql原生语句高级运用技巧

1.sql中group by的使用

“group by”从字面上理解就是根据“by”指定的规则对数据进行分组,所谓的分组就是讲一个“数据集”划分成若干个“小区域”,然后进行数据处理。下面看一份原始表

22c0443c3040a45ec5eadae81883c2f8.png

简单的group by案例

select 类别,sum(数量) as 数量之和

form A

group by 类别

返回结果如下,实际就是分类汇总

78f246590fc20fbef6bf81d3f55f084c.png

group by和order by的示例

select 类别,sum(数量) as 数量之和

from A

group by 类别

order by sum(数量) desc

返回结果如下表

462db4d4bd676ec56cbaf4dd61c047cd.png

group by all示例

select 类别,摘要,sum(数量) as 数量之和

form A

group by all 类别,摘要

示例中则可以指定“摘要”字段,其原因在于“多列分组”,其执行结果如下表

26806ca382cdfa0210da696bc3d627fa.png

2.sql中where和having使用

where子句的作用是在对查询进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行

having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件过滤出特定的组,也可以使用多个分组标准镜像分组

select 类别,sum(数量) as数量之和 from A

group by 类别

having sum(数量) > 18

示例:having和where的联合使用方法

select 类别,sum(数量) from A

where 数量 gt; 8

group by 类别

having sum(数量) gt; 10

3.单篇文章多条评论SQL案例运用

社区网站案例,单篇文章有多条评论,我想一个SQL语句搞定。一般思路是先查询出所有的文章,再foreach遍历去评论表中根据文章id查询评论数,但是这里不需要,我们只需要在查询字段中虚拟一个commnum评论数的字段。

SELECT

cy_comment.postid,

Count(cy_comment.postid) AS commnum,

cy_post.title

FROM

cy_comment

INNER JOIN cy_post ON cy_comment.postid = cy_post.id

WHERE

cy_post.addtime BETWEEN 1519975017

AND 1519975667

GROUP BY

cy_comment.postid

ORDER BY

commnum DESC,

cy_post.addtime DESC

LIMIT 15

文章评论表SQL语句查询前后结果对比,其中postid是文章id,ouid是用户id

119cc3ccd3ce76e7891107c1bbe769fb.png

查询出我只需要的id结果集

313b0598379175d0c6aec3e79eb7d4ae.png

还有一种案例被广泛应用,就是某个时间段用户发评论数的排行

SELECT

cy_oauth_user.id,

cy_oauth_user.nickname,

cy_oauth_user.head_img,

Count(cy_comment.ouid) AS usernum

FROM

cy_oauth_user

INNER JOIN cy_comment ON cy_comment.ouid = cy_oauth_user.id

WHERE

cy_comment.date BETWEEN 1480681424

AND 1495988770

GROUP BY

cy_comment.ouid

ORDER BY

usernum DESC

LIMIT 12

跟上面类似,usernum是用户评论数,最后结果如下

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值