SELECT [column,] group_function(column)FROM table[WHERE condition][GROUP BY column][HAVING group_function(column)exPRession[ORDER BY column|group_function(column)expression]分組函數
MIN函數和MAX函數
MIN([DISTINCT|ALL] column|expression):返回每組中的最小值MAX([DISTINCT|ALL] column|expression):返回每組中的最大值MIN和MAX函數可以用于任何數據類型-- 查詢入職日期最早和最晚的日期SELECT MIN(hiredate),MAX(hiredate)FROM empSUM函數和AVG函數
SUM([DISTINCT|ALL] column|expression):返回每組的總和AVG([DISTINCT|ALL] column|expression):返回每組的平均值SUM和AVG函數只能夠對數值類型的列或表達式操作-- 查詢職位以SALES開頭的所有員工的平均工資、工資和SELECT AVG(sal),SUM(sal)FROM empWHERE job LIKE 'SALES%'COUNT函數
COUNT(*):返回表中滿足條件的行記錄數-- 查詢部門30有多少個員工SELECT COUNT(*)FROM empWHERE deptno=30COUNT([DISTINCT|ALL] column|expression):返回表中滿足條件的非空行記錄數-- 查詢部門30有多少個員工領取獎金SELECT COUNT(comm)FROM empWHERE deptno=30分組函數中的DISTINCT
DISTINCT會消除重復記錄后再使用組函數-- 查詢有員工的部門數量SELECT COUNT(DISTINCT deptno)FROM emp分組函數中的空值處理
除了COUNT(*)之外,其他所有分組函數都會忽略列表中的空值,然后再進行計算-- 查詢獎金的平均值SELECT AVG(comm)FROM emp在分組函數中使用NVL函數可以使分組函數強制包含含有空值的記錄-- 查詢所有員工領取到的獎金的平均值SELECT AVG(NVL(comm,0))FROM empGROUP BY子句
創建數據組
使用GROUP BY子句可將表中滿足WHERE條件的記錄按照指定的列劃分成若干個小組,其中GROUP BY子句指定要分組的列-- 用GROUP BY子句創建數據組SELECT column,group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column]使用GROUP BY子句
在SELECT列表中除了分組函數那些項,所有列都必須包含在GROUP BY子句中SELECT deptno,AVG(sal)FROM empGROUP BY deptnoGROUP BY所指定的列并不是必須出現在SELECT列表中SELECT AVG(sal)FROM empGROUP BY deptno按多列分組的GROUP BY子句SELECT deptno,job,SUM(sal)FROM empGROUP BY deptno,jobHAVING子句
不能在WHERE子句中限制組,要在HAVING子句中對數據組進行限制-- 用HAVNG子句限制數據組SELECT column,group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column]使用HAVING子句限制數據組SELECT deptno,MAX(sal)FROM empGROUP BY deptnoHAVING MAX(sal)>2900SELECT語句執行過程
通過FROM子句中找到需要查詢的表通過WHERE子句進行非分組函數篩選判斷通過GROUP BY子句完成分組操作通過HAVING子句完成組函數篩選操作通過SELECT子句選擇顯示的列或表達式及組函數通過ORDER BY子句進行排序操作組函數的嵌套
與單行函數不同,組函數只能嵌套兩層SELECT MAX(AVG(sal))FROM empGROUP BY deptno
新聞熱點
疑難解答