首页 > 解决方案 > 基于 SQL 上的不同表对单个列进行 SUM

问题描述

我有两个表, min_attribution 和 max_attribution 看起来像这样

session_id    attribution
1               search
2                 home

session_id    attribution
1               search
2                other

这是夫人

CREATE TABLE min_attribution
(session_id   INT, 
 attribution VARCHAR(20)
)

CREATE TABLE max_attribution
(session_id   INT, 
 attribution VARCHAR(20)
)

Insert into min_attribution values (1,'search')
Insert into min_attribution values (2,'home')
Insert into max_attribution values (1,'search')
Insert into max_attribution values (2,'other')

我正在尝试编写一个查询,其中根据属性的值,为每个用户 ID 给出并添加一个分数。例如,如果在第一个表中,attribution 的值为 search,则添加 40 并对另一个表执行相同操作,但添加 30。预期输出:

    session_id  search  home    other
         1        70     0        0
         2         0    40        30

我所做的是尝试为每个可能的归因值(只有几个)创建一个列,并从每个表中添加结果,从“搜索”开始,但它没有正确添加。这是我的查询

SELECT min_attribution.session_id, SUM(
        (CASE WHEN min_attribution.attribution = "search" THEN 40  ELSE 0 END) + 
        (CASE WHEN max_attribution.attribution = "search" THEN 30  ELSE 0 END)) search
FROM min_attribution,
     max_attribution
GROUP BY min_attribution.session_id

结果表(当前输出,仅用于搜索列):

session_id  search
1            110
2             30

有任何想法吗?(我正在使用 BigQuery)

标签: sqlgoogle-bigquery

解决方案


我想你想要union all

select session_id,
       40 * countif(attribute = 'search'),
       40 * countif(attribute = 'home'),
       40 * countif(attribute = 'other')
from ((select session_id, attribution
       from min_attribution
      ) union all
      (select session_id, attribution
       from max_attribution
      )
     ) s
group by session_id;

推荐阅读