sql - 基于 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)
解决方案
我想你想要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;
推荐阅读
- node.js - 努力拍摄 React 网页截图
- react-admin - 根据另一个输入的值更新输入值?
- python - 为什么使用 keras 和 tensorflow 训练成功并预测失败?
- regex - Make checkstyle require variable prefix
- angular - 常量服务变量 Angular
- git - 在 Jenkins 多分支管道作业中运行 Git 命令
- python - scrapy 从另一个选择器创建选择器
- android - USE_FINGERPRINT 在 API 级别 28 中已弃用
- java - 将来自多个 android 活动的数据保存到一个 Firebase 数据库
- swift - 设置 fastMathEnabled 以便在 swift 中进行精确计算