SQL HAVING 子句

在SQL中增加HAVING子句原因是,WHERE关键字无法与聚合函数一起使用。聚合函数有:1、AVG,返回平均值;2、COUNT,返回指定组中项目的数量;3、MAX,返回指定数据的最大值;4、MIN,返回指定数据的最小值;5、SUM,返回指定数据的和;6、VAR,返回给定表达式中所有值的统计方差;7、VARP等等。HAVING 子句可以让我们筛选分组后的各组数据。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
演示数据集:创建class数据集,引用sas系统中自带的sashelp.class数据集。
data class;
  set sashelp.class;
run;
253112-1.png

SQL HAVING 实例
现在我们想要查找heigth+weight>150学生。
我们使用下面的代码:
proc sql;
CREATE TABLE class1 AS
SELECT name,sex,age,count(*) as num,sum(height,weight) AS nums
FROM class
GROUP BY sex
HAVING SUM(height,weight) >150;
quit;
253112-2.png

现在我们想要查找heigth+weight>150学生,并且sex="1"。我们在SQL语句中增加一个普通的 WHERE 子句:
proc sql;
CREATE TABLE class1 AS
SELECT name,sex,age,count(*) as num,sum(height,weight) AS nums
FROM class
where sex="1"
GROUP BY sex
HAVING SUM(height,weight) >150;
quit;


253112-3.png



总结:

where 和having之后都是筛选条件,但是有区别的:

1.where在group by前, having在group by 之后。

2.聚合函数(avg、sum、max、min、count...),不能作为条件放在where之后,但可以放在having之后。

请前往:http://www.mark-to-win.com/TeacherV2.html?id=166