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

SQL Server查询求助:按规则计算用户总积分的实现

解决方案:按用户计算积分规则的SQL查询

我来帮你搞定这个查询需求!根据你的计算规则,我们可以用分组聚合+条件判断的方式来实现,下面是具体的SQL语句(适用于大多数关系型数据库,比如MySQL、PostgreSQL、SQL Server等):

SELECT 
    userId,
    SUM(CASE WHEN type = 1 THEN point ELSE 0 END) * COALESCE(MAX(CASE WHEN type = 2 THEN point END), 1) AS totalPoint
FROM 
    your_table_name  -- 记得替换成你的实际表名
GROUP BY 
    userId;

逻辑拆解:

  • 统计type=1的积分总和:SUM(CASE WHEN type = 1 THEN point ELSE 0 END)会遍历每条记录,只累加type为1的point值,确保不管用户有没有type=2的记录,这部分都能正确计算。
  • 获取type=2的积分值:MAX(CASE WHEN type = 2 THEN point END)会提取用户type为2的point值;如果用户有多条type=2的记录,会取最大的那个(如果你的业务里每个用户type=2只有一条,用MAX或MIN效果一致);如果没有type=2的记录,这个表达式会返回NULL。
  • 处理无type=2的情况:COALESCE(..., 1)把NULL替换成1,这样当没有type=2记录时,总和乘以1就等于总和本身,完美匹配你的需求。

验证示例数据:

把你的测试数据代入这个查询:

  • userId=3:type1总和是3+5+6=14,type2的point是2,14*2=28
  • userId=4:type1总和是5,没有type2记录,5*1=5
    结果完全和你期望的一致!

如果你的数据库是MySQL,也可以把COALESCE换成IFNULL,效果完全相同:

SELECT 
    userId,
    SUM(CASE WHEN type = 1 THEN point ELSE 0 END) * IFNULL(MAX(CASE WHEN type = 2 THEN point END), 1) AS totalPoint
FROM 
    your_table_name
GROUP BY 
    userId;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:48