Oracle分组查询
2015-08-25 16:28
218 查看
首先要明白的一点:数据重复的时候分组才有意义。
分组查询语法:
特别说明的几点(非常重要):
1,GROUP BY 分组字段不能用字段别名;
2,没有分组时
统计函数可以单独用于SELECT之后,但是不能再出现其他字段;
3,单字段分组时
SELECT之后就只能用统计函数和GROUP BY之后的字段;
4,多字段分组时
涉及到的两个问题:
①跨表间的关联字段;-->消除笛卡儿积
②需要解决单字段分组时的局限性(如上第3点),解决方法:一般情况是在FROM后嵌套子查询-->构建临时表。举例如下:
列出各个部门的MANAGER(经理)的最低薪金、姓名、部门名称、部门人数。
1、确定所需要的数据表:
emp表:找到经理的薪金、姓名;
dept表:部门名称;
emp表:统计部门人数;
2、确定已知的关联字段:emp.deptno=dept.deptno;
第一步:找到所有部门的经理
第三步:加入部门的名称信息
第四步:统计部门人数
分组查询语法:
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>
相关文章推荐
- Mybatis中oracle、mysql、db2、sql server的like模糊查询
- Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
- Window7 64位旗舰版 安装Oracle 11gR2 安装图解
- LINUX oracle dbca无法启动
- asp.net link oracle
- oracle中字符串的操作
- asp.net link oracle error ORA-06413: 连接未打开
- oracle删除表空间后 再创建同名表空间报错 OSD-04010
- Oracle 11gR2 Client安装
- oracle游标的更新与删除数据
- 优化Oracle数据库查询10个方法
- ORACLE中的varchar2()与nvarchar2()的讲解
- Oracle的悲观锁和乐观锁---摘抄
- mySql与oracle分页技术原理与实现
- ORACLE初始化参数文件概述
- Oracle的启动过程
- Oracle存储过程异常信息的显示
- 如何简化 Oracle Linux 上 Oracle Database 的安装
- Oracle使用并行索引需要注意的问题
- jdbc连接oracle报错No suitable driver found for jdbc