综合练习

目录

[显示所有非销售人员的工作名称以及计算出从事同一工作的员工的月工资总和,并且筛选出从事同一工作的员工的月工资总和大于 500 的工作名称,显示的结果按照月工资总和进行升序排列](#显示所有非销售人员的工作名称以及计算出从事同一工作的员工的月工资总和,并且筛选出从事同一工作的员工的月工资总和大于 500 的工作名称,显示的结果按照月工资总和进行升序排列)

统计所有领取佣金和不领取佣金的人数、平均工资

注意事项


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

显示所有非销售人员的工作名称以及计算出从事同一工作的员工的月工资总和,并且筛选出从事同一工作的员工的月工资总和大于 500 的工作名称,显示的结果按照月工资总和进行升序排列

第一步:查询所有非销售人员的信息,使用 where子句进行限定查询

sql 复制代码
SQL> select *
  2  from emp
  3  where job<>'SALESMAN';

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10

已选择 8 行。

第二步:按照职位进行分组,而后求出月工资的总支出

sql 复制代码
SQL> select job,sum(sal)
  2  from emp
  3  where job<>'SALESMAN'
  4  group by job;

JOB                  SUM(SAL)
------------------ ----------
CLERK                    3050
ANALYST                  3000
MANAGER                  8275
PRESIDENT                5000

第三步:分组后的数据进行再次的筛选,使用 HAVING 子句

sql 复制代码
SQL> select job,sum(sal)
  2  from emp
  3  where job<>'SALESMAN'
  4  group by job
  5  having sum(sal)>5000;

JOB                  SUM(SAL)
------------------ ----------
MANAGER                  8275

第四步:按照月工资的合计进行升序排列,使用 order by 子句

sql 复制代码
SQL> select job,sum(sal) sum
  2  from emp
  3  where job<>'SALESMAN'
  4  group by job
  5  having sum(sal)>5000
  6  order by sum;

JOB                       SUM
------------------ ----------
MANAGER                  8275

我这儿只有一行,但是可能有些朋友数据不一样,我还是写一下吧

统计所有领取佣金和不领取佣金的人数、平均工资

按照简单的思维模式,可以使用 com 分组

sql 复制代码
SQL> select comm,count(*),avg(sal)
  2  from emp
  3  group by comm;

      COMM   COUNT(*)   AVG(SAL)
---------- ---------- ----------
       300          1       1600
      1400          1       1250
                    9   2415.625
       500          1       1250
         0          1       1500

使用 group by 的时候会把每一个种子值当做一个分组,所以此时不可能直接使用 GROUP BY

那么现在可以换一个思路,把问题拆分一下

查询出所有领取佣金的员工的人数、平均工资。直接使用 where子句,不使用 group by

sql 复制代码
SQL> select '领取佣金' info ,count(*),avg(sal)
  2  from emp
  3  where comm is not null;

INFO                       COUNT(*)   AVG(SAL)
------------------------ ---------- ----------
领取佣金                          4       1400

查询出所有不领取佣金的员工的人数、平均工资。直接使用 where子句,不使用 group by

sql 复制代码
SQL> select '不领取佣金' info ,count(*),avg(sal)
  2  from emp
  3  where comm is null;

INFO                             COUNT(*)   AVG(SAL)
------------------------------ ---------- ----------
不领取佣金                              9   2415.625

既然此时两个查询结果返回的结构完全相同,那么直接连接即可

sql 复制代码
SQL> select '领取佣金' info ,count(*),avg(sal)
  2  from emp
  3  where comm is not null
  4  union
  5  select '领取佣金' info ,count(*),avg(sal)
  6  from emp
  7  where comm is null;

INFO                       COUNT(*)   AVG(SAL)
------------------------ ---------- ----------
领取佣金                          4       1400
领取佣金                          9   2415.625

说明并不是什么时候都要使用分组统计函数,要根据具体要求灵活使用

注意事项

(1)hroup by 子句经常和统计函数一起使用,在一起使用的时候,如果 select 语句中包含统 计函数,则计算每组的汇总值。

(2)Having 子句对 group by 子句选择出来的结果进行二次筛选,最后输出符合 having 子句中条件的记录。

(3)Havinh子句与 where 子句的语法类型,二者不同之处在于 having子句可以包含统计函数。

相关推荐
lzhlizihang25 分钟前
【Hive sql 面试题】求出各类型专利top 10申请人,以及对应的专利申请数(难)
大数据·hive·sql·面试题
BearHan34 分钟前
Sqlsugar调用Oracle的存储过程
oracle·存储过程·orm
superman超哥1 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452001 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina2 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina2 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程2 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai2 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网