我在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
答案 0 :(得分:16)
完整的错误消息应采用Expression Not In Group By Key [value]
格式
[value]
将告诉您Group By
中需要的表达式。
只看两个查询,我就说你需要明确地向a.date_saved
添加Group By
。
答案 1 :(得分:9)
四处走动是将附加字段放在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);
答案 2 :(得分:0)
这是因为您的分组依据下有多个“ date_saved”记录。您可以将这些“ date_saved”记录转换为数组并输出。
答案 3 :(得分:-1)
我也遇到了同样的问题。如果您尝试使用beeline执行查询,请以小写形式编写查询。像这样:
select column_name(s)
from table_name
where condition
group by column_name(s).
用小写字写它为我工作尝试它我认为它会起作用。