13

我在 HIVE 中创建了一个表。它具有以下列:

id bigint, rank bigint, date string

我想每月获得平均(排名)。我可以使用这个命令。有用。

select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

但是,我也想获取日期信息。我使用这个命令:

select a.lens_id, avg(a.rank), a.date_saved
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);

它抱怨:Expression Not In Group By Key

4

3 回答 3

16

完整的错误信息应采用Expression Not In Group By Key [value].
[value]告诉您需要在Group By.

看看这两个查询,我会说你需要a.date_saved明确地添加到Group By.

于 2011-04-21T17:02:24.847 回答
12

四处走走是将附加字段放入 collect_set 并返回集合的第一个元素。例如

select a.lens_id, avg(a.rank), collect_set(a.date_saved)[0]
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);
于 2012-05-13T22:40:03.637 回答
0

这是因为您的 group by 下有多个“date_saved”记录。您可以将这些 'date_saved' 记录转换为数组并输出。

于 2018-09-21T07:57:32.913 回答