每位员工每周佣金的 Oracle SQL

Posted

技术标签:

【中文标题】每位员工每周佣金的 Oracle SQL【英文标题】:Oracle SQL for commission per employee per week 【发布时间】:2016-09-06 05:17:27 【问题描述】:

以下是我尝试使用的 Oracle 11g 数据库中的示例数据,以提出 SQL 查询来返回每位员工每周赚取的佣金。如果员工在一周内没有赚取佣金,那么它应该显示为 0,就像在 Commission_earned 列中一样。 (假设一周从星期一开始)

SQL> 从销售中选择 *;

EMPLID PRODUCT_TYPE          PRODUCTID SALE_AMOUNT COMMISSION_EARNED SALE_DATE

  1001 Desktop                55355251         750                45 02-MAY-16
  1002 Desktop                 2332134         600                30 02-MAY-16
  1001 Laptop                   773643        1200                65 02-MAY-16
  1003 Camera                  5546232         450                25 03-MAY-16
  1002 Printer                  445321         150                15 04-MAY-16
  1001 Printer                  445321         150                15 10-MAY-16
  1003 Camera                  5546232         450                25 10-MAY-16

我正在尝试提出一个 sql 来返回每个员工每周赚取的总佣金。如有任何帮助或指点,我将不胜感激。

WEEKOF EMPLID COMMISSION_EARNED 02-MAY-16 1001 110 02-MAY-16 1002 45 02-MAY-16 1003 25 09-MAY-16 1001 15 09-MAY-16 1002 0 09-MAY-16 1003 25

我想出了下面的 sql,但从 09-MAY-16 开始的那一周,它没有显示 emplid 1002 的一行,commision_earned 为 0

SQL> select trunc(sale_date,'IW') WEEKOF,emplid,sum(COMMISSION_EARNED) COMMISSION_EARNED from sales group by trunc(sale_date,'IW'),emplid order by trunc(sale_date,'IW'),emplid;

WEEKOF EMPLID COMMISSION_EARNED 16 年 5 月 2 日 1001 110 16 年 5 月 2 日 1002 45 16 年 5 月 2 日 1003 25 16 年 5 月 9 日 1001 15 09-5-16 1003 25

【问题讨论】:

你有员工表吗?员工的开始日期是否会影响这一点(即,如果员工还没有开始工作,是否应该有一个 0 周的记录)? 【参考方案1】:

您可以使用cross join 生成所有行,然后使用left join 从表中获取信息:

select w.wk, e.emplid,
       coalesce(sum(t.commission_earned), 0) as commission_earned
from (select distinct trunc(weekof, 'IW') as wk from test) w cross join
     (select distinct emplid from test) e left join
     test t
     on t.emplid = e.emplid and trunc(t.weekof, 'IW') = w.wk
group by w.wk, e.emplid
order by w.wk, e.emplid;

【讨论】:

嗨,戈登,感谢您的建议。我不得不稍微修改它以在带有内联视图 e 的交叉连接中选择不同的 empid。没有它,commission_earned 将显示 3X 时间实际值(x 乘以不同 empids 的数量)

以上是关于每位员工每周佣金的 Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 笔试题02

佣金最高的员工平均工资是多少

Oracle SQL:经典查询练手第一篇

oracle sql练习 菜鸟入门!

每周出勤总结一次

oracle学习篇三:SQL查询