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

Oracle中SUM(COUNT())用法问题:关联表衍生列计算

解决Oracle中衍生列(出勤人数×课程单价)的计算问题

嘿,我看你想要生成一个计算每门课程总收入的衍生列,也就是用关联表的出勤人数乘以课程单价对吧?你的尝试语句里有个小问题,咱们调整一下就好啦~

问题分析

你原来的语句里用了sum(count(*)*c.FEE),这里犯了嵌套聚合函数的错误——count(*)本身已经是分组后的聚合结果(统计每门课程的出勤记录数),不需要再用sum去包裹它。而且只要同一个course_id对应的课程单价c.FEE是唯一的(这也是课程表的合理设计),直接用出勤人数乘以单价就能得到总收入。

修正后的SQL语句

SELECT 
    a.course_id,
    COUNT(*) * c.FEE AS "Income", -- 核心:出勤记录数 × 课程单价 = 总收入
    c.COURSE_NAME,
    c.STORE,
    c.VENUE,
    c.COURSE_LEVEL,
    c.COURSE_DATE,
    c.DURATION,
    c.FEE,
    c.STAFF
FROM attendancecheck a
INNER JOIN course c ON a.course_id = c.course_id
GROUP BY 
    a.course_id,
    c.COURSE_NAME,
    c.STORE,
    c.VENUE,
    c.COURSE_LEVEL,
    c.COURSE_DATE,
    c.DURATION,
    c.FEE,
    c.STAFF;

额外说明

  1. 如果你的attendancecheck表中可能存在同一用户多次打卡的重复记录,想要统计实际不同的出勤人数,可以把COUNT(*)改成COUNT(DISTINCT a.user_id)(假设表中有user_id字段标识用户),避免重复计数。
  2. 另一种等价写法是用SUM(c.FEE)代替COUNT(*) * c.FEE,因为每个出勤记录都会对应一次课程单价,求和的结果和人数×单价是完全一致的,你可以根据习惯选择。

内容的提问来源于stack exchange,提问作者Daniel Lawton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:18