- 計(jì)數(shù)(統(tǒng)計(jì))。舉例:求員工的總?cè)藬?shù),SELECT COUNT(*) FROM emp;
SQL> SELECT COUNT(*) FROM emp;
COUNT(*)-
15
- 在使用分組時(shí)可以使用DISTINCT關(guān)鍵字來(lái)去重。
SQL> select count(distinct deptno) from emp;
COUNT(DISTINCTDEPTNO)
3
e、WM_CONCAT行轉(zhuǎn)列(讓查詢結(jié)果行轉(zhuǎn)列)
- 該函數(shù)可以把列值以‘,’號(hào)分隔起來(lái),并顯示成一行。
SQL> select wm_concat(ename) from emp;
WM_CONCAT(ENAME)
EASON,G_EASON,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,
FORD,MILLER
2、Group by子句
- 作用:可以將表中的數(shù)據(jù)分成若干組。
- Group by子句的語(yǔ)法:SELECT [column,] group function(column), ... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
- 例如:求出每個(gè)部分的平均工資,要求顯示:部門號(hào),部分的平均工資。
- SELECT deptno, avg(sal) from emp group by deptno;
SQL> SELECT deptno, avg(sal) from emp group by deptno;
DEPTNO AVG(SAL)
30 1566.66667
20 2312.5
10 2916.66667
- 在SELECT列表中所有未包含在組函數(shù)中的列都應(yīng)包含在GROUP BY子句中。如按照部門和職位進(jìn)行分組:
SQL> SELECT deptno, job, avg(sal) from emp group by deptno, job;
DEPTNO JOB AVG(SAL)
20 CLERK 950
30 SALESMAN 1400
20 MANAGER 2975
30 CLERK 950
10 PRESIDENT 5000
30 MANAGER 2850
10 CLERK 1300
20 ANALYST 3000
10 MANAGER 2450
已選擇9行。
- 包含在group by 子句中的列不必包含在SELECT列表當(dāng)中:
SQL> select avg(sal) from emp group by deptno;
AVG(SAL)
1566.66667
2312.5
2916.66667
- 再如示例:求出每個(gè)部分的員工姓名,要求顯示:部分標(biāo)號(hào)、員工姓名。
SQL> select deptno, WM_concat(ename) from emp group by deptno;
DEPTNO WM_CONCAT(ENAME)
10 CLARK,MILLER,KING
20 EASON,FORD,ADAMS,SCOTT,JONES,G_EASON
30 ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD
3、Having子句
- 作用:用于對(duì)分組后的結(jié)果進(jìn)行過(guò)濾。
- 例子:請(qǐng)平均工資大于2500的部分,要求顯示:部門號(hào),平均工資]
- 不能再WHERE子句中使用組函數(shù),可以在having子句中使用組函數(shù)。
SQL> select deptno,avg(sal) from emp group by deptno having avg(sal) >2500;
DEPTNO AVG(SAL)
10 2916.66667
- having子句和group by子句通常一起使用。