04-Oracle学习_group by 和 having

浅浅的花香味﹌ 2021-11-02 03:46 330阅读 0赞

一, group by

注意:
select 子句里的字段 必须
出现在 group by子句中
或者 出现在组函数中

1, 单字段分组

-- 按 部门 分组, 求各部门的平均薪水
SQL> select deptno, avg(sal) from emp
2 group by deptno;
DEPTNO AVG(SAL)
-————- —————
30 1637.5
20 2347
10 2916.66667

2, 多字段的组合分组

-- 按 部门和工种 分组, 求各分组的最大薪水
SQL> select deptno, job, max(sal) from emp
2 group by deptno, job;
DEPTNO JOB MAX(SAL)
-————- ————————— —————
20 MANAGER 2975
30 SALESMAN 1500
20 CLERK 1210
30 CLERK 950

3, 求其他字段

-- 薪水最高的那个人的名字
SQL> select ename from emp
2 where sal = (select max(sal) from emp);
ENAME
-—————————-
KING
-- 每个部门里, 最高薪水
SQL> select deptno, max(sal) from emp group by deptno;
DEPTNO MAX(SAL)
-————- —————
30 2850
20 3300
10 5000

二, having

对 组 进行过滤

1, 列出 平均薪水 大于 2000 的部门编号

SQL> select deptno, avg(sal) from emp group by deptno;
DEPTNO AVG(SAL)
-————- —————
30 1637.5
20 2347
10 2916.66667
SQL> select deptno, avg(sal) from emp
2 group by deptno
3 having avg(sal) > 2000;
DEPTNO AVG(SAL)
-————- —————
20 2347
10 2916.66667

2, 注意与总结

having 是对 分组 进行限制
where 是对 单条记录进行限制, 优先于分组
即:
select
from
where
group by
having
order by

3, 练习

薪水大于1200的雇员, 按照部门编号进行分组,
这些分组的平均薪水大于1500,
查询分组的平均工资, 按平均工资的倒序排序
SQL> select deptno, avg(sal)
2 from emp
3 where sal > 1200
4 group by deptno
5 having avg(sal) > 1500
6 order by avg(sal) desc;
DEPTNO AVG(SAL)
-————- —————
10 2916.66667
20 2347
30 1866.66667

发表评论

表情:
评论列表 (有 0 条评论,330人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Oracle Group By 用法之 —— Having

    客户需求分析:   笔者最近接到一家客户的一个需求。他们部署了一个ERP系统,现在采用的就是Oracle数据库。现在由于企业统计分析的需要,要实现如下的需 求。   1、按

    相关 mysql GROUP BYHAVING

    GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 select子句中的列名必须为分组列或列函数,列函数对于group by子句