1

我有两张桌子

表格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

我想要表 1 中存在的表 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>)
 ;

错误是:

在 'di_device_id' 附近的 'WHERE' 缺少 EOF

4

2 回答 2

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
 ;
于 2015-08-18T16:12:39.990 回答
3

你有两个问题:-

  1. Where出现在 group by 之前。在 SQL 语法中,您用于having在分组后进行过滤!
  2. Hive 不支持 Where 子句中所有类型的嵌套查询。请参见此处:Hive 子查询

但是,您的子查询类型可以。试试这个:-

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 WHERE tab2.id IN (select id from <mytable1>)
 GROUP BY tab2.id;

它会按照你的意思做同样的事情。

编辑:我刚刚检查了@MattinBit 的答案。我不打算重复答案。他的回答更完整!

于 2015-08-18T16:26:45.333 回答