我有两张桌子
表1:
id
1
2
3
表2:
id date
1 x1
4 x2
1 x3
3 x4
3 x5
1 x6
3 x5
6 x6
6 x5
3 x6
我想要表2中表2中每个ID的计数。
结果
id count
1 3
2 0
3 4
我正在使用此查询,但它给了我错误:
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2
GROUP BY tab2.id
WHERE tab2.id IN (select id from <mytable1>)
;
错误是:
在&#39; WHERE&#39;靠近&#39; di_device_id&#39;
答案 0 :(得分:3)
有两个可能的问题。仅从Hive 0.13及更高版本支持WHERE子句中的子查询。如果你使用的是这样的版本,那么你的问题只是你有错误的WHERE和GROUP BY:
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2
WHERE tab2.id IN (select id from <mytable1>)
GROUP BY tab2.id
;
如果您使用的是旧版本的Hive,则需要使用JOIN:
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2 INNER JOIN <mytable1> tab1 ON (tab2.id = tab1.id)
GROUP BY tab2.id
;
答案 1 :(得分:2)
你有两个问题: -
Where
来自group by。在SQL语法中,您使用having
在分组后过滤!但是你的子查询类型就可以了。试试这个: -
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2
WHERE tab2.id IN (select id from <mytable1>)
GROUP BY tab2.id;
你的意思完全一样。
编辑:我刚刚查看了@ MattinBit的回答。我没有打算复制答案。他的答案更完整!