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

跨Z_KSS与Z_KSS2两表统计Distinct MEM_ID:是否用全外连接及On条件?

嘿,我来帮你搞定这个SQL统计的问题~

问题解答

1. 是否应该使用FULL OUTER JOIN?

可以用,但得分场景选择更合适的方式:

  • 如果只需要统计去重的MEM_ID数量,用UNION会更简洁高效——它会自动帮你去除重复的MEM_ID,不需要做复杂的关联操作。
  • 如果还要同时统计金额总和,那FULL OUTER JOIN是合适的,因为它能把两张表的所有记录都包含进来,方便合并同一MEM_ID在两张表中的金额。

2. 是否需要指定ON条件?

必须要! 要是不加ON条件,FULL OUTER JOIN会生成两张表的笛卡尔积(所有记录两两配对),这完全不符合你的统计需求。你得加上ON Z_KSS.MEM_ID = Z_KSS2.MEM_ID,这样才能把两张表中相同的MEM_ID关联起来,准确识别出重复的会员ID,避免重复计数。

实用SQL方案推荐

方案一:仅统计去重MEM_ID数量(简单直接)

如果只需要会员数,用这个就够了:

SELECT COUNT(DISTINCT MEM_ID) AS unique_mem_count, 'KSS' AS Company
FROM (
    SELECT MEM_ID FROM temp_09.Z_KSS
    UNION  -- UNION自动去重,同一MEM_ID仅保留一条
    SELECT MEM_ID FROM temp_09.Z_KSS2
) AS combined_mems

方案二:同时统计会员数和总金额(用FULL OUTER JOIN)

如果要一起计算金额,得处理NULL值(比如某个MEM_ID只在一张表存在时,另一张表的Amount会是NULL),用COALESCE把NULL转成0就能避免求和出错:

SELECT 
    COUNT(DISTINCT COALESCE(z1.MEM_ID, z2.MEM_ID)) AS unique_mem_count,
    SUM(COALESCE(z1.Amount, 0) + COALESCE(z2.Amount, 0)) AS total_amount,
    'KSS' AS Company
FROM temp_09.Z_KSS z1
FULL OUTER JOIN temp_09.Z_KSS2 z2
    ON z1.MEM_ID = z2.MEM_ID

提个醒:你原来的SQL缺少ON条件,而且直接sum(Amount)没有区分两张表的字段,这样肯定会计算错误,一定要补上ON条件并正确处理金额字段哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:24:56