【发布时间】:2020-09-07 17:44:04
【问题描述】:
我正在尝试从 3 个表中获取数据,然后加入该结果集,如下所示:
SELECT r.region,
r.recordtype,
i.entity,
COUNT(i.requestid) AS responses
FROM (
SELECT region,
recordtype,
entity,
requestid
FROM (
SELECT region,
'a' AS recordtype,
requestid
FROM db.table1
UNION ALL
SELECT region,
'b' AS recordtype,
requestid
FROM db.table2
UNION ALL
SELECT region,
'c' AS recordtype,
requestid
FROM db.table3
) union_results
) r
RIGHT JOIN db.responses i
ON r.requestid = i.requestid
GROUP BY r.recordtype,
r.region,
i.entity
我最终要寻找的是 i.requestid 在其他三个表的联合结果中的行的结果,然后按所示分组,虽然我什至不确定我是否正确使用 RIGHT JOIN我在基本查询中遇到错误。
请求表 1 (a)
requestid region
abcdef us
bcdefg eu
cdefgh eu
请求表 2 (b)
requestid region
fghijk eu
rstuwx eu
jklmno eu
请求表 3 (c)
requestid region
klmnop eu
ghijkl eu
opqrst eu
回复
requestid entity
abcdef 1
rstuwx 3
ghijkl 5
opqrst 5
结果
region entity recordtype count(responses)
us 1 a 1
eu 3 b 1
eu 5 c 2
我成功地将联合作为子查询单独使用,但是当与连接配对时,我收到以下错误,所以我正在寻找关于我做错了什么的指针,我现在已经失明了。我使用中间表,因为最终计划是根据扩展数据在此处创建一些动态列(示例仅代表查询工作后我将最终提取的一些列)。
失败:ParseException 第 4:6 行无法识别 '(' 附近的输入 joinSource 命令中的 'SELECT' 'region' 以 ret '64' 退出
谢谢!
【问题讨论】:
-
为什么会有3个这么相似的表?
-
如果您从查询中删除
db.responses(i) 以及对它的所有引用,它会起作用吗? -
我会尝试
GROUP BY r.region, r.recordtype,等其他问题得到纠正。 -
为 UNION ALL 部分创建一个视图。加入它并分组。
-
我用 UNION 做了一个快速测试,加入了分组响应,没有错误。编辑问题以将示例数据和所需结果显示为文本表。