mysql中的where,group by,having:

最近工作中碰到不少关于mysql的问题,以前天真的认为掌握增删改查就没什么问题了,结果是屡次碰壁。事实上mysql还有很多很多需要研究的东西。。

整理了一下自己最近遇到的一些问题,还有一些理论性的东西,正所谓知识在于分享,所以就贴出来作为笔记,也希望能帮到一些朋友。

1、首先是where和having的区别:

作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。众所周知,我们用where的时候都是作为一些限制条件,而这些条件绝大部分都是属于扫描全表性质的。

WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。

因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。

我们一般用where都是where id=1之类的,而从来没有用过where count(id)=1,这种用法是会报错的。

例如:有个订单表,字段分别是,customer,price,我们需要查找订单总额大于2000的用户:

select customer,SUM(price) from order group by customer HAVING SUM(price)>2000;

在限制条件需要使用聚合函数时,就不能再用单纯的where来限制了。

需要注意的是,having一般跟在group by之后,执行记录组选择的一部分来工作的。

2、简述group by

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

注意:在SELECT语句中指定的每个列名也在GROUP BY子句中提到。未在这两个地方提到的列名将产生错误。

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)

例如:select A,B from table group by A

(错误的,因为B没有用聚合函数,且没有出现在group by之后)

select A,count(B) as 数量 from table group by A

(正确的语法,使用聚合函数的字段不需要出现在group by 之后)

3、mysql中的count和sum的区别:

这两个字段是我们经常需要用到的,很基础的聚合函数,但基础的也许是关注最少的,所以在此也简单的说一下。 count 是‘累计’; sum是‘累加’;

count:例如:查询每个年级中分数大于60的有多少人以及他们的平均分,总分是多少:

语句:select grade ,count(*) ,avg(score) from a_info where score>60 group by grade ;

sum:例如:查询每个年级总分数大于200的用哪些;

语句:select grade ,sum(score) from a_info a group by grade having sum(score) >200;




本文多数为在下工作中碰到然后百度下来的,零零散散的记录,如果有侵权,请通知一下,不胜感激。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值