八、分組函式/聚合函式/雙行處理函式
阿新 • • 發佈:2019-02-10
函式
count | 數量 |
---|---|
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
分組函式不能直接使用在where關鍵字後面。
mysql> select ename, sal from emp where max(sal) < sal;
ERROR 1111 (HY000): Invalid(無效) use of group function
去除重複記錄
select distinct deptno,job from emp;
distinct只能出現在所有欄位前方
分組查詢
- 分組查詢兩個子句:
group by、 having
mysql> select ename,job, max(sal) from emp group by job;
在mysql中可以,但是沒有實際意義。
在Oracle中不可以,語法報錯。
重點:
若一條DQL語句當中有group by子句,那麼select關鍵字後面只能跟參與分組的欄位和分組函式。
select job, max(sal) from emp where job != 'MANAGER' group by job;
where條件得在group by的前面。先得去除不等於MAMAGER的,然後在進行分組。
select job, avg(sal) from emp where avg(sal) > 1500 group by job;
select job, avg(sal) from emp group by job having avg(sal) > 1500;
重點:
where關鍵字後面不能直接使用分組函式。
分組函式必須在分組完成後執行,而分組需要group by,而group by在where後面執行。
having和where功能都是為了完成資料的過濾。
where和having後面都是新增條件。
where在group by之前完成過濾。
having在group by之後完成過濾
原則:
儘量在where中過濾,無法過濾的資料,通常是需要先分組子後在過濾的,這個時候可以選擇使用having。
完整的DQL語句的總結:
select
...
from ...
where ...
group by ...
having ...
order by...
說明:
1. 書寫順序不能改變
2. having不能單獨使用,必須和group by連用
3. 執行順序:
3.1 from 從某張表中檢索資料
3.2 where 經過某個條件進行篩選
3.3 group by 分組
3.4 having 分組之後在篩選
3.5 select 查詢列
3.6 order by 排序輸出