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

Oracle SQL按周末、工作日拆分统计月度营收的实现问题

方案1:使用条件聚合(推荐,性能最优)

这是实现该需求最简洁高效的方式,仅需扫描一次表即可完成计算,不需要多次查询或关联:

SELECT
    enrollment_month,
    SUM(CASE WHEN lesson_day IN ('Saturday','Sunday') THEN total_revenue ELSE 0 END) AS weekend_revenue,
    SUM(CASE WHEN lesson_day IN ('Monday','Tuesday','Wednesday','Thursday','Friday') THEN total_revenue ELSE 0 END) AS weekday_revenue
FROM gracieMusicFact
GROUP BY enrollment_month;

逻辑说明:通过CASE WHEN在聚合时分别对符合周末、工作日条件的营收单独求和,直接得到两列的统计结果。

方案2:子查询关联(适配现有两段查询的写法)

如果你希望基于已写好的两个独立查询实现合并,可以将两个查询作为子查询,通过月份字段关联得到横向拼接的结果:

SELECT
    COALESCE(wd.enrollment_month, we.enrollment_month) AS enrollment_month,
    COALESCE(we.weekend_revenue, 0) AS weekend_revenue,
    COALESCE(wd.weekday_revenue, 0) AS weekday_revenue
FROM (
    SELECT enrollment_month, sum(total_revenue) as weekday_revenue 
    FROM gracieMusicFact
    WHERE lesson_day IN ('Monday','Tuesday','Wednesday','Thursday','Friday')
    GROUP BY enrollment_month
) wd
FULL OUTER JOIN (
    SELECT enrollment_month, sum(total_revenue) as weekend_revenue 
    FROM gracieMusicFact
    WHERE lesson_day IN ('Saturday','Sunday')
    GROUP BY enrollment_month
) we ON wd.enrollment_month = we.enrollment_month;

逻辑说明:这里用FULL OUTER JOIN是为了避免某个月仅有工作日/仅有周末营收时数据丢失,COALESCE用于处理关联空值时的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:18:04