標籤:
查詢
1、分組查詢 GROUP BY, HAVING
2、基本函數
AVG(品均值) avg(column_name)求這一列的品均值
SUM(求和) sum(column_name)求這一列的總和
MAX(最大值) max(column_name)求這一列中的最大值
MIN(最小值) min(colunm_name)求這一列的最小值
COUNT(求總數) count(*)求總行數,count(column_name)求這一列的總行數,count(distinct column_name)去重求總行數
WM_CONCAT(行轉列)
NVL(column_name,default) 略空函數 當column_name為空白時返回default
3、group by
(1)查詢部門品均工資:
select deptno,avg(sal) from emp group by deptno;
select avg(sal) from emp group by deptno;
在分組查詢group by中,不包含在組函數中的列都要卸載group by子句後面,而包含在group by後的列不必包含在select列表中。
(2)按照部門不同職位來統計員工品均工資:
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;
group by後的列按照先後順序進行分組,即先安裝第一列進行分組再按照第二列進行分組以此類推。
4、having子句
查詢部門品均工資大於2000的部門:
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;
where和having的區別:
1、在where子句中不能使用avg、sum等組函數,而having子句中可以使用。
2、where是先過濾後分組,having是先分組後過濾。
(從sql最佳化的角度來說:如果where和having都能使用時優先使用where)
5、group by增強
(1)select deptno,job,sum(sal) from emp group by deptno,job;
(2)select deptno,sum(sal) from emp group by deptno;
(3)select sum(sal) from emp;
(4)select deptno,job,sum(sal) from emp group by rollup(deptno,job);
(1)+(2)+(3)=(4)
Oracle學習3