2011-04-21 41 views
9

我在HIVE中創建表。 它具有以下欄目: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

回答

13

完整的錯誤消息應該是在格式Expression Not In Group By Key [value]
[value]會告訴你Group By需要什麼表情。

只看這兩個查詢,我會說你需要明確地將a.date_saved添加到Group By

+2

是的。添加a.date_saved後,它可以工作。但是,它沒有做我想要的。我想每月平均(排名)。現在它不是平均水平。它只顯示自a.date_saved添加組以來的所有記錄。 – chnet 2011-04-21 17:38:51

+2

@chnet:您不能選擇一列,也不能按該列進行分組。如果你想顯示'a.date_saved',你需要按它分組。您可能會顯示'year(a.date_saved)'和'month(a.date_saved)',因爲它們位於「Group by」中,但不是100%。 – Nija 2011-04-21 17:44:36

+0

謝謝。我可以顯示年份(a.date_saved)和月份(a.date_saved)。 – chnet 2011-04-21 17:52:18

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); 
0

我也遇到了同樣的問題。如果您試圖使用直線執行查詢,然後寫入您的查詢以小寫。

+0

清楚地編輯答案 – 2017-09-16 09:56:45