Oracle分组查询


首先要明白的一点:数据重复的时候分组才有意义。


分组查询语法:

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、确定所需要的数据表:

  • emp表:找到经理的薪金、姓名;
  • dept表:部门名称;
  • emp表:统计部门人数;

2、确定已知的关联字段:emp.deptno=dept.deptno;

第一步:找到所有部门的经理

   

<span style="font-size:18px;">SELECT deptno,MIN(sal)
FROM emp
WHERE job='MANAGER'
GROUP BY deptno;</span>
第二步:找到姓名,但是以上的子查询,不能再出现其他的字段


<span style="font-size:18px;">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';</span>


第三步:加入部门的名称信息


<span style="font-size:18px;">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;</span>


第四步:统计部门人数


<span style="font-size:18px;">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;</span>



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值