问题描述
我正在尝试从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'退出
谢谢!
解决方法
此查询对我有用:
SELECT r.region,r.recordtype,entity,Count(responses.requestid) AS responses FROM
(SELECT region,"a" AS recordtype,requestid FROM Table1
UNION ALL SELECT region,"b",requestid FROM Table2
UNION ALL SELECT region,"c",requestid FROM Table3) AS r
RIGHT JOIN responses ON r.requestid=responses.requestid
GROUP BY recordtype,region,entity;