综合练习

目录

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

相关推荐
Polar__Star41 分钟前
C#怎么操作Chart图表控件 C#如何用WinForms Chart控件绑定数据绘制统计图表【控件】
jvm·数据库·python
2401_897190551 小时前
CSS如何制作数字滚动效果_利用transform位移数字
jvm·数据库·python
我叫黑大帅1 小时前
如何排查 MySQL 慢查询
后端·sql·面试
一 乐1 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
1.14(java)1 小时前
Spring核心:IoC与DI详解
数据库
运维 小白1 小时前
PostgreSQL高可用(Patroni + etcd + Keepalived)
数据库·postgresql·etcd
2301_813599552 小时前
HTML图片怎么用UnoCSS对齐_UnoCSS原子化CSS图片对齐实战
jvm·数据库·python
m0_377618232 小时前
c++怎么在不加载整个大文件的情况下获取其SHA256校验值【进阶】
jvm·数据库·python
檬柠wan2 小时前
MySQL-数据库增删改查学习
数据库·学习·mysql
qq_189807032 小时前
CSS如何实现纯CSS树状目录结构_利用-checked与递归思维构建交互节点
jvm·数据库·python