首先要明白的一點:資料重複的時候分組才有意義。
分組查詢語法:
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 ...