Oracle分組查詢

2021-07-04 20:12:39 字數 1990 閱讀 9068

首先要明白的一點:資料重複的時候分組才有意義。

分組查詢語法:

select [distinct] *|分組欄位1 [別名] [,分組欄位2 [別名] ,…] | 統計函式

from 表名稱 [別名], [表名稱 [別名] ,…]

[where 條件(s)]

[group by 分組欄位1 [,分組欄位2 ,…]]

[order by 排序字段 asc | desc [,排序字段 asc | desc]];

特別說明的幾點(非常重要):

1,group by 分組字段不能用字段別名;

2,沒有分組時

統計函式可以單獨用於select之後,但是不能再出現其他字段;

3,單字段分組時

select之後就只能用統計函式和group by之後的字段;

4,多欄位分組時

涉及到的兩個問題:

①跨表間的關聯字段;-->消除笛卡兒積

②需要解決單字段分組時的侷限性(如上第3點),解決方法:一般情況是在from後巢狀子查詢-->構建臨時表。舉例如下:

列出各個部門的manager(經理)的最低薪金、姓名、部門名稱、部門人數。

1、確定所需要的資料表:

2、確定已知的關聯字段:emp.deptno=dept.deptno;

第一步:找到所有部門的經理

select deptno,min(sal)

from emp

where job='manager'

group by deptno;

第二步:找到姓名,但是以上的子查詢,不能再出現其他的字段

select e.ename,e.sal

from emp e,(

select deptno dno,min(sal) sal

from emp

where job=』manager』

group by deptno) temp

where e.deptno=temp.dno and e.sal=temp.sal and e.job='manager';

第三步:加入部門的名稱資訊

select e.ename,e.sal,d.dname

from emp e,(

select deptno dno,min(sal) sal

from emp

where job='manager'

group by deptno) temp,dept d

where e.deptno=temp.dno and e.sal=temp.sal and e.job='manager'

and e.deptno=d.deptno;

第四步:統計部門人數

select e.ename,e.sal,d.dname,res.count

from emp e,(

select deptno dno,min(sal) sal

from emp

where job=』manager』

group by deptno) temp,dept d,(

select deptno dno,count(empno) count

from emp

group by deptno) res

where e.deptno=temp.dno and e.sal=temp.sal and e.job='manager'

and e.deptno=d.deptno and res.dno=d.deptno;



oracle 分組查詢

組函式 count 個數 sum 求和 g 平均 max 最大值 min 最小值 count 會實際的統計出表中的資料量 count 字段 如果統計的字段上不包含有 null,那麼與 count 結果相同 如果統計欄位上包含有了 null,null 不參與統計 count distinct 字段 消...

oracle的拆分組合查詢

表 msg content 表 msg contact person 想要得到的效果 要點分析 結果表和表1不同的地方是receiver欄位加入了表2的真實姓名 實現方式 第一步 拆分表1的字段 select c.msg content id as contentid,regexp substr r...

oracle查詢資料以時間分組

處理統計資料的時候,經常會出現這樣的情況,每條資料記錄的時間都是當時時間點的時間戳,但是分析資料的時候,卻想把資料按照每天 每月等情況來分組。因此在查詢資料的時候,需要用比較巧妙的辦法來實現。以下是以每天分組的oracle select語句事例 select to char create time ...