综合练习

目录

[显示所有非销售人员的工作名称以及计算出从事同一工作的员工的月工资总和,并且筛选出从事同一工作的员工的月工资总和大于 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子句可以包含统计函数。

相关推荐
AI-好学者12 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
其实防守也摸鱼13 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚13 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
龙仔72513 小时前
SQL Server 创建只读账号完整操作(分两种场景:SSMS图形界面 + T-SQL脚本)
数据库·sql·oracle
霁月的小屋14 小时前
生产环境中的事务实践——银行系统上线记(四)
数据库
Database_Cool_14 小时前
AI 应用数据底座首选:阿里云 PolarDB 为大模型 RAG 提供一体化支撑
数据库·阿里云
玖玥拾14 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
IvorySQL15 小时前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
逝水无殇16 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
罗政17 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php