我有两个表,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给定并添加一个分数。例如,如果在第一个表中,属性的值是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)
发布于 2021-02-08 05:55:35
我觉得你想要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;https://stackoverflow.com/questions/66093489
复制相似问题