之所以把这两个放在一起写,是因为他们两个有密切的联系。我们先来看看group by
group by子句查询所得到的结果是按某一列或多列值分组,值相等的为一组。比如:
| sex |
age |
| A |
18 |
| B |
20 |
| A |
20 |
想让A性别的归一组,就可以应用到group by了,但是group by更多的情况是应用于集函数。比如
select sex,sum(age) sumage
from t
group by sex;
这样就可以出现这样的结果:
| sex |
sumage |
| A |
38 |
| B |
20 |
group by的使用形式一般为:
| SELECT column,SUM(column) FROM table GROUP BY column |
其中SUM()或以是其它集函数。
HAVING 的引入,因为WHERE子句后面不能接集函数,而集函数是我们经常大量使用的,这就大大不方便,所以SQL引入了HAVING。 WHERE子句与HAVING子句的区别在于:作用对象不同,WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,从中选择满足条件的组。
简单一点说就是:WHERE筛选记录,HAVING筛选组。
从HAVING 与WHERE 的区别不难看出HAVING的应用,与分组密切相关。与就是经常和 GROUP BY一起使用了。
一般形式:
| SELECT column,SUM(column) FROM table GROUP BY column HAVING SUM(column) condition value |
如前面讲到的例子:
select sex,sum(age) sumage
from t
group by sex
having sum(age)>20;
结果就只列出一条记录了:
sex sumage
-- -----
A 38
