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

Oracle SQL中如何用SUM()按用户分组汇总不同交易类型金额

Oracle SQL:按用户拆分不同交易类型求和的正确实现

原SQL的问题分析

你的尝试SQL存在几个关键问题:

  • 语法错误:"USER 未闭合双引号,且列之间缺少逗号分隔
  • 条件错误:WHERE子句误写为trans_value = 1,实际应该针对trans_type_id筛选,但使用WHERE会直接过滤掉其他类型的数据,无法得到多列求和结果
  • 未实现需求:仅对单一值求和,没有按交易类型拆分统计

正确SQL实现

要得到你需要的按用户、分交易类型的求和结果,需要使用CASE WHEN配合SUM()函数实现行转列:

SELECT
    user_id AS "USER",
    SUM(CASE WHEN trans_type_id = 1 THEN trans_value END) AS "SUM(TRANS_TYPE_1)",
    SUM(CASE WHEN trans_type_id = 2 THEN trans_value END) AS "SUM(TRANS_TYPE_2)"
FROM 
    TRANSACTION
GROUP BY
    user_id
ORDER BY user_id;

逻辑说明

  • CASE WHEN会判断每条记录的交易类型:当trans_type_id匹配目标类型时返回对应trans_value,否则返回NULL
  • SUM()函数会自动忽略NULL值,只对符合条件的交易金额求和
  • 按user_id分组后,每个用户的不同交易类型求和结果会汇总到同一行
  • 不添加WHERE子句,确保所有用户和交易类型的数据都被统计,避免丢失无对应交易类型的用户数据(比如用户3的TRANS_TYPE_2列显示NULL)

验证结果

执行上述SQL后,会得到完全符合你需求的结果:

USERSUM(TRANS_TYPE_1)SUM(TRANS_TYPE_2)
11525
2520
335NULL

内容的提问来源于stack exchange,提问作者Nicolás Ortega Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:20:34