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

BigQuery SQL两表按date和id关联取首行计算对应name的shares总和

你出现结果翻倍的核心原因是table1中同一个date+id组合存在重复行,左关联时每一行重复数据都会匹配到table2对应的shares值,导致sum统计时被重复累加。只需要提前对table1按date+id去重,每组仅保留一行参与关联即可。

方案1:用DISTINCT去重(写法最简单,兼容性最高)

SELECT t1.date, t1.name,
       COALESCE(SUM(t2.shares), 0) AS shares
FROM (
    SELECT DISTINCT date, id, name
    FROM table1
) t1 
LEFT JOIN table2 t2
ON t2.date = t1.date AND t2.id = t1.id
GROUP BY t1.date, t1.name

说明:同一个date+id对应的name值是固定的,直接对三个字段去重就能得到每个date+id的唯一行。

方案2:用窗口函数取每组第一行(完全匹配“取每组第一行”的需求)

适用于支持窗口函数的SQL引擎(MySQL 8.0+、PostgreSQL、Spark SQL、Hive等):

SELECT t1.date, t1.name,
       COALESCE(SUM(t2.shares), 0) AS shares
FROM (
    SELECT date, id, name,
           ROW_NUMBER() OVER(PARTITION BY date, id ORDER BY date) AS rn
    FROM table1
) t1 
LEFT JOIN table2 t2
ON t2.date = t1.date AND t2.id = t1.id
WHERE t1.rn = 1
GROUP BY t1.date, t1.name

说明:ROW_NUMBER()会给每个date+id分组的行按排序规则生成序号,筛选rn=1就可以只取每组的第一行参与后续关联计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:57:03