1. 程式人生 > >初學oracle--groupby+where與having

初學oracle--groupby+where與having

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;

group by 後面多欄位
2、倒過來的情景是下面:e,f不用非放到select後;

select a,b,c,組函式(d) from table group by a,b,c,    e,f;

group by後的欄位數多於前面

3、先按照第一個列分組;再按照第二列分組,以此類推。

分組函式(多行函式):
是作用於一組資料,並對一組資料返回一個值。
常用的分組函式有:avg、count、max、min、sum

where與having的不同點
1、where子句中不能使用分組函式,having可以;
where後不能跟分組函式
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;