分組查詢(xún)主要涉及到兩個(gè)子句,分別是:group by和having。
1、取得每個(gè)工作崗位的工資合計(jì),要求顯示崗位名稱(chēng)和工資合計(jì)
select job, sum(sal) from emp group by job;
采用group by,非聚合函數(shù)使用的字段必須參與分組。
如果使用了order by,order by必須放到group by后面。
2、按照工作崗位和部門(mén)編碼分組,取得的工資合計(jì)
● 原始數(shù)據(jù)
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇14行。
● 分組語(yǔ)句
select job,deptno, sum(sal) from emp group by job,deptno;
● 分組后的數(shù)據(jù)
SQL> select job,deptno, sum(sal) from emp group by job,deptno;
JOB DEPTNO SUM(SAL)
--------- ---------- ----------
PRESIDENT 10 5000
CLERK 10 1300
SALESMAN 30 5600
ANALYST 20 6000
MANAGER 30 5825
MANAGER 10 2450
CLERK 30 950
CLERK 20 1900
已選擇8行。
Group by中不能使用聚合函數(shù)。
如果想對(duì)分組數(shù)據(jù)再進(jìn)行過(guò)濾需要使用having子句。
取得每個(gè)崗位的平均工資大于2000
select job, avg(sal) from emp group by job having avg(sal) >2000;
分組函數(shù)的執(zhí)行順序:
1、 根據(jù)條件查詢(xún)數(shù)據(jù)
2、 分組
3、 采用having過(guò)濾,取得正確的數(shù)據(jù)
一個(gè)完整的select語(yǔ)句格式如下:
select 字段
from 表名
where …….
group by ……..
having …….
order by ……..
以上語(yǔ)句的執(zhí)行順序:
1、首先執(zhí)行where語(yǔ)句過(guò)濾原始數(shù)據(jù)
2、 執(zhí)行g(shù)roup by進(jìn)行分組
3、 執(zhí)行having對(duì)分組數(shù)據(jù)進(jìn)行操作
4、 執(zhí)行select選出數(shù)據(jù)
5、執(zhí)行order by排序