失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 详解在group by分组查询中where 和 having的用法和区别。

详解在group by分组查询中where 和 having的用法和区别。

时间:2019-10-21 04:40:45

相关推荐

详解在group by分组查询中where 和 having的用法和区别。

我地都知道sql 中 where 和 having 都是用来筛选条件的关键字。

而且having 一般和group by 一齐使用, 但是where 也可以用group by 一齐使用的。

下面用个简单例子讲解下:

有一张分数表Grade_1, 3个column 分别是 dep, name 和 grade, 如下图,好明显可以用部门dep来分组. 表中总共9条数据

下面语句是用来列出所有部门的总分。 并没有用到where 和 having 字句。

select dep as Dep,sum(grade) as Sum_grade

from Grade_1

group by dep

可以见到3个组的总分都列出来了。 呢个唔难理解。

where 子句:

下面用1个where字句, 意思是列出所有部门分数大于或等于60分的人的总分

select dep as Dep,sum(grade) as Sum_grade

from Grade_1

where grade >= 60

group by dep

可以见到, 部门1 和 部门2的总分 都比上面的总分数减少了

是因为 where字句的作用, 语句在分组前把第1组的 Allen(40分)

和 第二组的piero (45分) 排除掉了。

第一组和第二组实际上都是其余两个人的总分,

所以可总结出:

1. where字句用在group by之前。

2. where 作用于单个记录(行)

3. where 作用生效后(筛选后), group by分组才生效, 也就是where字句作用于 group by 之前。

Having 子句:

下面用1个Having字句, 意思是列出最低分数大于40的部门的总分

select dep as Dep,sum(grade) as Sum_grade

from Grade_1

group by dep

having min(grade) > 40

可以见到 结果把整个第一组排除出去了, 是因为

第一组有个人Allen的分数不大于40 也就是说 第一组的最低分是40, 不符合条件。

所以可总结出:

1. having 字句用在group by之后。

2. having 字句 作用于单个组(1行或多行)

3. group by 分组后, 才用having 子句来分组, 所以having字句作用在分组之后。

where 和 having 子句一齐使用:

下面语句就是上面两个条件一齐使用,

select dep as Dep,sum(grade) as Sum_grade

from Grade_1

where grade >= 60

group by dep

having min(grade) > 40

可以见到第一组又出来了, 之前不是说第一组的最低分是40吗?

答案都好简单,因为分组前 where字句先起作用, 把分数小于60的数据都排除出去了,

分组后

当having子句起作用时, 第一分组已经不包含小于60的数据(Allen), 所以第一分组这是的最低分是60(Jason),符合条件拉!

如果觉得《详解在group by分组查询中where 和 having的用法和区别。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。