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

Oracle SQL 按ID计算工作日与周末消费占比的实现方案

按ID计算工作日/周末消费占比的Oracle SQL最优实现

实现思路

  • 采用Oracle原生窗口函数SUM() OVER(PARTITION BY id)计算每个ID的总消费金额,无需额外子查询或表关联,仅需一次表扫描即可完成计算,性能最优
  • 取整逻辑可根据业务需求选择对应函数:四舍五入取整用ROUND,截断取整用TRUNC,向上取整用CEIL

实现代码

假设源表名为user_daily_consume,字段分别为id(用户ID)、date_type(日期类型,值为weekday/weekend)、daily_amount(每日消费总额),SQL如下:

SELECT
    id,
    date_type,
    -- 四舍五入取整,若需其他取整规则替换ROUND即可
    ROUND((daily_amount / NULLIF(SUM(daily_amount) OVER (PARTITION BY id), 0)) * 100) AS 对应占比
FROM user_daily_consume;

方案优势

  1. 性能最优:仅执行一次全表扫描,相比先分组计算ID总消费再关联原表的写法,减少了IO开销,大数据量表下优势尤其明显
  2. 容错性高:加入NULLIF函数处理ID总消费为0的场景,避免出现除零报错
  3. 易维护:代码逻辑简洁,调整取整规则或统计维度仅需修改少量代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:05