首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据SQL上的不同表对单个列进行求和

根据SQL上的不同表对单个列进行求和
EN

Stack Overflow用户
提问于 2021-02-08 05:52:40
回答 1查看 29关注 0票数 0

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

代码语言:javascript
复制
session_id    attribution
1               search
2                 home

session_id    attribution
1               search
2                other

这是我的夫人

代码语言:javascript
复制
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给定并添加一个分数。例如,如果在第一个表中,属性的值是search,则添加40,并对另一个表执行相同的操作,但添加30。预期输出:

代码语言:javascript
复制
    session_id  search  home    other
         1        70     0        0
         2         0    40        30

我所做的是尝试为每个可能的属性值(只有几个)创建一列,并添加来自每个表的结果,从“搜索”开始,但它没有正确添加。这是我的问题

代码语言:javascript
复制
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

和结果表(当前输出,仅针对搜索列):

代码语言:javascript
复制
session_id  search
1            110
2             30

有什么想法吗?(我使用的是BigQuery)

EN

回答 1

Stack Overflow用户

发布于 2021-02-08 05:55:35

我觉得你想要union all

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66093489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档