2015-02-07 84 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;

相关问题