初學oracle--groupby+where與having
阿新 • • 發佈:2019-02-02
SELECT語句比較複雜,其主要的子句語法格式如下:
SELECT <列> /*指定要選擇的列及其限定*/
FROM <表或檢視> /*FROM子句,指定表或檢視*/
[ WHERE <條件表示式> ] /*WHERE子句,指定查詢條件*/
[ GROUP BY <分組表示式> ] /*GROUP BY子句,指定分組表示式*/
[ HAVING <分組條件表示式> ] /*HAVING 子句,指定分組統計條件*/
[ ORDER BY <排序表示式> [ ASC | DESC ]] /*ORDER子句,指定排序表示式和順序*/
group by注意幾點
1、select語句中所有沒有包含在組函式中的欄位都必須包含在group by 後面(如果使用group by語句);
select a,b,c,組函式(d) from table group by a,b,c;
2、倒過來的情景是下面:e,f不用非放到select後;
select a,b,c,組函式(d) from table group by a,b,c, e,f;
3、先按照第一個列分組;再按照第二列分組,以此類推。
分組函式(多行函式):
是作用於一組資料,並對一組資料返回一個值。
常用的分組函式有:avg、count、max、min、sum
where與having的不同點
1、where子句中不能使用分組函式,having可以;
2、兩者比較,能用where儘量用where;(註釋:having先分組在過濾,where先過濾在分組。)
3、having子句和group by一起使用,緊跟在group by的後邊。(因為having先分組在過濾)
where與having的相同點
如果where和having後的條件語句中沒有分組函式,where和having是通用的。
使用條件
使用having的條件,首先行被分組,其次使用了分組函式,where就沒這麼多使用限制。
where與having一起使用的例子:
select deptno,sum(sal) from emp
where deptno!='10' group by deptno
having sum(sal)>8000;