GROUP BY子句
指定查询结果的分组条件
语法:GROUP BY [ALL] group_by_expression_r_r [,n]
[WITH{CUBE|ROLLUP}]
group_by_expression_r_r指明分组条件,通常是一个列名,但不能是列的别名。
ALL返回所有查询结果的组合。如果没有满足where子句的数据则由NULL值构成数据。ALL的选项不能与cube或rollup选项同时使用。
cube:除了返回由GROUP BY指定的列外,还返回按组统计的行。返回结果先按第一个条件列排序显示,再按第二个条件列排序显示,以此类推。统计列包括了各种组合的数据统计。
rollup:对GROUP BY中列的顺序敏感,只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果的行数发生变化。
注意使用group by子句时后面的变量要和select后相一致,没有包含在聚合函数中的变量都应该作为group by后的变量。
HAVING 子句指定分组搜索条件。通常和group by一起使用
HAVING子句和WHERE很相似,但WHERE子句作用于表和视图,HAVING子句作用于组。
SELECT DEPT_ID,COUNT(*)
FROM EMPLYEE
WHERE E_WAGE>=6000
GROUP BY DEPT_ID
HAVING COUNT(*)>1;其中COUNT(*)表示满足条件的元素个数。
ORDER BY子句,指定查询结果的排序方式,默认升序ASC降序DESC
查询工资最高的三名员工
select top 3 e_name,e_wage
from employee
order by e_wage desc;
compute子句:在查询结尾的末尾生成一个汇总数据行。
compute{{AVG|COUNT|MAX|MIN|SUM} (expression_r_r [...,n]) [by expression_r_r[...,n]]}这些函数会忽略NULL值,并且DISTINCT选项不能在此使用。
expression_r_r必须包含在select的选项里,并且不能使用别名。
by expression_r_r在查询结果中生成分类统计的行,如果使用,必须使用order by子句,expression_r_r对应order by子句的一部分或全集。
如:select 员工姓名,所属部门,工资
from 员工数据表
order by 所属部门
compute sum(工资) by 所属部门
结果会出现在每个所属部门分组后有一个计算sum的行
聚合函数:AVG,SUM,MIN,MAX,COUNT
COUNT(*)计算表中的行数,一样的都计算上。COUNT(DISTINCT)计算不同的行数
汇总函数忽略NULL值。
以上几个子句中数据类型不能为text,ntext,image或bit类型。