2015-02-07 90 views
1

我正在編寫配置單元查詢,用於獲取記錄具有最大頻率值。HIVE QUERY SELECT * FROM bookfreq where freq IN(SELECT Max(freq)FROM bookfreq);

table name bookfreq, having two column year & freq 

year freq 

1999 2 

2000 4 

1989 4 

1990 5 

查詢:

SELECT * FROM bookfreq where freq IN (SELECT Max(freq) FROM bookfreq); 

我得到一個異常喜歡

FAILED: ParseException line 1:38 cannot recognize input near 'SELECT' 'Max' '(' in expression specification 

回答

0

如果你有蜂巢0.13或更高版本(如記錄here),這種類型的子查詢的應該是可能的。但是,列名仍然必須完全合格。所以,做什麼,我想你想在蜂巢0.13做或超越它會

SELECT * FROM bookfreq a 
WHERE a.freq IN (SELECT max(b.freq) FROM bookfreq b); 

如果你有蜂巢的舊版本,你可以試試這個符號:

SELECT a.* 
FROM bookfreq a JOIN (SELECT max(freq) as max_freq FROM bookfreq) b 
    ON a.freq = b.max_freq; 

如果仍然無法正常工作(這可能意味着你的蜂巢版本是非常過時的),你可能要真正創建一個包含max(freq)作爲一個具體的對象首先表:

CREATE TABLE b AS SELECT max(freq) AS max_freq FROM bookfreq; 

然後使用普通的b運行上述查詢。例如:

SELECT bookfreq.* 
FROM bookfreq JOIN b ON bookfreq.freq = b.max_freq; 
+0

謝謝。 rchang :-)爲你快速抵抗。 – 2015-02-07 17:53:58

0

您需要爲配置單元中的任何子查詢添加一個別名。

嘗試增加一個別名到您的子查詢像這樣:

SELECT * FROM bookfreq其中頻率IN(SELECT MAX(頻率)FROM bookfreq)一個;

只是一個偏愛在這裏,但我更喜歡如下把它寫:

SELECT * FROM(選擇MAX(頻率)從bookfreq max_freq)聯接上a.max_freq = b.freq bookfreq B;

相關問題