SQL HAVING 子句
在SQL中增加HAVING子句原因是,WHERE關(guān)鍵字無法與聚合函數(shù)一起使用。聚合函數(shù)有:1、AVG,返回平均值;2、COUNT,返回指定組中項目的數(shù)量;3、MAX,返回指定數(shù)據(jù)的最大值;4、MIN,返回指定數(shù)據(jù)的最小值;5、SUM,返回指定數(shù)據(jù)的和;6、VAR,返回給定表達式中所有值的統(tǒng)計方差;7、VARP等等。HAVING 子句可以讓我們篩選分組后的各組數(shù)據(jù)。
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;
演示數(shù)據(jù)集:創(chuàng)建class數(shù)據(jù)集,引用sas系統(tǒng)中自帶的sashelp.class數(shù)據(jù)集。
data class;
set sashelp.class;
run;
SQL HAVING 實例
現(xiàn)在我們想要查找heigth+weight>150學(xué)生。
我們使用下面的代碼:
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;
現(xiàn)在我們想要查找heigth+weight>150學(xué)生,并且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;
總結(jié):
where 和having之后都是篩選條件,但是有區(qū)別的:
1.where在group by前, having在group by 之后。
2.聚合函數(shù)(avg、sum、max、min、count...),不能作為條件放在where之后,但可以放在having之后。
請前往:http://lygongshang.com/TeacherV2.html?id=166