You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL关联员工与交易表查询 汇总个人佣金并保留两位小数

问题背景
  • 业务库包含两张表:
    • EMPLOYEE:存储包含销售人员在内的所有员工信息
    • TRANSACTION:存储全量交易记录
  • 查询目标:关联两张表,返回员工的名(fName)、姓(lName),以及按交易金额2.5%比例计算的佣金
  • 原有查询存在两个待修复问题:
    1. 佣金字段小数位数不统一,部分结果显示三位小数,需统一保留两位小数
    2. 同一员工对应多笔交易时会返回多条重复记录,需按员工维度汇总佣金,实现每位员工仅返回一条汇总记录
原有SQL语句
SELECT fName, lName, Amount_Due * 0.025 AS Commission
FROM EMPLOYEE, "TRANSACTION"
WHERE  EMPLOYEE.Eid = "TRANSACTION".eID
原查询返回结果示例
fNAMElNAMECommission
JaneDoe20.00
JaneDoe12.00
JackJones10.000
JackJones15.000
JohnDoe12.000
JohnDoe14.00
修正方案

核心修正逻辑:

  1. 替换原有隐式表连接为显式INNER JOIN写法,逻辑更清晰,便于后续维护
  2. 使用GROUP BY按员工唯一ID、姓名维度分组,通过SUM()函数累加同一名员工所有交易对应的佣金,解决单员工多条记录的问题
  3. 使用ROUND()函数对汇总后的佣金做精度处理,统一保留两位小数

修正后SQL代码:

SELECT 
  e.fName, 
  e.lName, 
  ROUND(SUM(t.Amount_Due * 0.025), 2) AS Commission
FROM EMPLOYEE e
INNER JOIN "TRANSACTION" t
  ON e.Eid = t.eID
GROUP BY e.Eid, e.fName, e.lName

可选扩展:如果需要返回无任何交易记录的员工(对应佣金显示为0.00),可将INNER JOIN替换为LEFT JOIN,同时增加空值处理逻辑,代码如下:

SELECT 
  e.fName, 
  e.lName, 
  ROUND(COALESCE(SUM(t.Amount_Due * 0.025), 0), 2) AS Commission
FROM EMPLOYEE e
LEFT JOIN "TRANSACTION" t
  ON e.Eid = t.eID
GROUP BY e.Eid, e.fName, e.lName

内容的提问来源于stack exchange,提问作者Kris Ellison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:51:25