无法使用配置单元聚合函数获得预期输出

Unable to get a expected output using hive aggregate function

我在 Hive 中创建了一个 table (movies),如下所示(id,name,year,rating,views)

1,The Nightmare Before Christmas,1993,3.9,4568 2,The Mummy,1932,3.5,4388 3,Orphans of the Storm,1921,3.2,9062 4,The Object of Beauty,1991,2.8,6150 5,Night Tide,1963,2.8,5126 6,One Magic Christmas,1985,3.8,5333 7,Muriel's Wedding,1994,3.5,6323 8,Mother's Boys,1994,3.4,5733 9,Nosferatu: Original Version,1929,3.5,5651 10,Nick of Time,1995,3.4,5333

我想编写一个配置单元查询来获取观看次数最多的电影的名称。

select name,max(views) from movies;

但是它给我一个错误 FAILED: Error in semantic analysis: Line 1:7 Expression not in GROUP BY key name

但是用 name 分组给了我完整的列表(这是预期的)。 我应该对查询进行哪些更改?

很可能有更简单的方法来做到这一点。

select name 
from(
    select max(views) as views
        , name
        , row_number() over (order by max(views) desc) as row_num 
    from movies  
    group by name
) m
where row_num = 1

经过一点点挖掘,我发现答案并不像我们在 SQL 中做的那么简单。下面的查询给出了预期的结果。

select a.name,a.views from movies a left semi join(select max(views) views from movies)b on (a.views=b.views);