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

SQL技术问询:基于含distinct的多表查询实现按用户汇总交易数

解决方案:按用户汇总去重角色后的交易数总和

你的核心问题是用户-角色关联存在重复记录,导致同一角色的交易数被多次统计。要解决这个问题,需要先去重用户与角色的关联关系,确保每个用户的每个角色只被计算一次,再汇总交易数。

以下是两种可行的实现方式:

方式一:使用CTE(公共表表达式)去重

WITH UniqueUserRoles AS (
    -- 先获取每个用户对应的唯一角色列表,去除重复的用户-角色记录
    SELECT DISTINCT Username, Role_Name
    FROM Table2
)
SELECT 
    udim.Username,
    -- 用COALESCE处理无角色用户的交易数,转为0
    COALESCE(SUM(roles.Count_Tcodes), 0) AS Total_Transactions
FROM Table1 AS udim
LEFT JOIN UniqueUserRoles AS uur
    ON udim.Username = uur.Username
LEFT JOIN Table3 AS roles
    ON uur.Role_Name = roles.Role_Name
GROUP BY udim.Username;

方式二:直接在JOIN中嵌入去重子查询

如果你的数据库版本不支持CTE,或者更习惯子查询写法,可以用这种方式:

SELECT 
    udim.Username,
    COALESCE(SUM(roles.Count_Tcodes), 0) AS Total_Transactions
FROM Table1 AS udim
LEFT JOIN (
    SELECT DISTINCT Username, Role_Name
    FROM Table2
) AS uur ON udim.Username = uur.Username
LEFT JOIN Table3 AS roles ON uur.Role_Name = roles.Role_Name
GROUP BY udim.Username;

逻辑说明

  1. 去重用户-角色关联:通过DISTINCT处理Table2,确保每个用户的每个角色只保留一条记录,避免后续关联时重复计算同一角色的交易数。
  2. 关联与汇总:将去重后的用户-角色数据与用户表、角色表关联,最后按用户分组,对角色的交易数求和。
  3. 空值处理:COALESCE函数把无角色用户的交易数总和(NULL)转为0,结果更符合业务预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:40:28