日期:2014-05-16  浏览次数:20410 次

聚合函数与分组【转】
需要注意count(*)和count(列名)的用法区别

使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会

在使用count(distinct 列名),过滤掉重复数据
GROUP BY 语句

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

需要注意的是 在分组中(即出现了group by 子句)必须满足下列2个条件:



1.查询的列必须是分组(聚合)函数,例如max(s_score)    avg(s_score)

2.或者查询的列必须是分组列

ORACLE的一个数字函数round来解决数字格式化问题如:select round ((s_score),2)from student group by s_name;

需要注意having和where的用法区别:

1.  having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)

2.  where肯定在group by 之前,即也在having之前

3.  where后的条件表达式里不允许使用聚合函数,而having可以

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

1。首先执行select xx from xx,返回一个结果记录集合

2.使用where对结果记录集合里的数据进行筛选

3.使用group by 对筛选后的结果分组

4.使用having对分组后的结果再次筛选

5.对最后剩下来的数据进行排序