Oracle SQL学习笔记 之 GROUP函数与GROUP BY子句_Dragon Zone_百度
Posted onOracle SQL学习笔记 之 GROUP函数与GROUP BY子句Dragon Zone百度空间
Dragon Zone
价值不是你拥有多少,而是你留下多少。
2007-11-23 14:08
Oracle SQL学习笔记 之 GROUP函数与GROUP BY子句
- Group函数 AVG COUNT MAX MIN STDDEV SUM VARIANCE 使用格式: SELECT column, group_function(column) FROM table [WHERE condition] [ORDER BY column];
Group 函数忽视列里面的 null 值,受影响的语句可能是: SQL> SELECT AVG(comm) 2 FROM emp; 结果为:
AVG(COMM)
550
但可以使用NVL函数强迫group函数在统计时包含null值 【实例】 SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp; 结果为:
AVG(NVL(COMM,0))
157.14286
- 使用GROUP BY子句 格式为: SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; 【实例】 SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno; 输出为: DEPTNO AVG(SAL)
10 2916.6667
20 2175
30 1566.6667
GROUP BY 列可以不在select的列表里面 【实例】 SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno; 输出为:
AVG(SAL)
2916.6667 2175 1566.6667
可以根据多个列进行分组 【实例】要实现“根据每个工作求出汇总工资,并按部门分组”: SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job; 原始数据为: DEPTNO JOB SAL
10 MANAGER 2450
10 PRESIDENT 5000
10 CLERK 1300
20 CLERK 800
20 CLERK 1100
20 ANALYST 3000
20 ANALYST 3000
20 MANAGER 2975
30 SALESMAN 1600
30 MANAGER 2850
30 SALESMAN 1250
30 CLERK 950
30 SALESMAN 1500
30 SALESMAN 1250
输出为: DEPTNO JOB SUM(SAL)
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
- 使用 HAVING 子句来限制分组 SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column]; 【实例】 SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900; 输出为: DEPTNO MAX(SAL)
10 5000
20 3000
【实例】 SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 5 HAVING SUM(sal)>5000 6 ORDER BY SUM(sal); 输出为: JOB PAYROLL
ANALYST 6000 MANAGER 8275
- 嵌套GROUP函数 【实例】 显示最大的平均工资 SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno; 输出为: MAX(AVG(SAL))
2916.6667
你可能也喜欢
©2012 Baidu