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

SQL查询:聚合列与非聚合列对比以排除匹配结果

正确SQL查询写法及思路

核心思路

要实现需求,需先计算表B每个Symbol的Value总和,再筛选出该总和未匹配表A对应Symbol任意Value的Symbol,最后关联表A和表B获取这些Symbol的所有记录。

通用SQL实现

WITH B_Summary AS (
    -- 计算表B每个Symbol的Value总和
    SELECT Symbol, SUM(Value) AS TotalValue
    FROM DatabaseB
    GROUP BY Symbol
),
Valid_Symbols AS (
    -- 筛选出表B总和未匹配表A对应Symbol任何Value的Symbol
    SELECT b.Symbol
    FROM B_Summary b
    LEFT JOIN DatabaseA a ON b.Symbol = a.Symbol
    GROUP BY b.Symbol, b.TotalValue
    HAVING COUNT(CASE WHEN a.Value = b.TotalValue THEN 1 END) = 0
)
-- 关联获取所有有效Symbol的记录
SELECT 
    b.Symbol AS SymbolB,
    b.Value AS ValueB,
    a.Symbol AS SymbolA,
    a.Value AS ValueA
FROM DatabaseA a
INNER JOIN DatabaseB b ON a.Symbol = b.Symbol
INNER JOIN Valid_Symbols vs ON a.Symbol = vs.Symbol
ORDER BY a.Symbol, a.Value;

示例数据验证

  1. Symbol A:表B总和为750+250=1000,与表A中A的Value(1000)匹配,因此被排除。
  2. Symbol B:表B总和为24+1416=1440,与表A中B的Value(1440)匹配,因此被排除。
  3. Symbol C:表B总和为1874,与表A中C的Value(1235)不匹配,因此保留所有对应记录,得到你期望的结果表C。

原查询问题分析

你之前的查询错误在于:将表A的Value非聚合字段加入GROUP BY,导致分组逻辑被拆分为表A的每条记录单独分组,无法实现“表B总和与表A对应Symbol所有Value整体对比”的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:35:20