如何从一列获取前 10 名并在 hive 中按另一列排序



我想找到具有大量用户ID的前10个标题。所以我使用了这样的查询

select title,count(userid) as users from combined_moviedata group by title order by users desc limit 10

但是我需要根据标题对它们进行排序,我尝试了此查询

select title,count(userid) as users from combined_moviedata group by title order by users desc,title asc limit 10

但它不会对它们进行排序。只是返回相同的结果。如何做到这一点

@KaushikNayak的答案非常接近我认为的"正确"答案。

  • 在一个层面上,计算出您的前 10 条记录是什么
  • 在不同的 级别,按不同的字段对它们进行排序

我唯一想说的是,如果第 10 和第 11 个最常见的标题并列相同计数,它们通常也应该包含在结果中。 这是一个RANK().

WITH
  ranked_titles AS
(
  SELECT
    RANK() OVER (ORDER BY COUNT(*) DESC)   frequency_rank,
    title
  FROM
    combined_moviedata
  GROUP BY
    title
)
SELECT
  *
FROM
  ranked_titles
WHERE
  frequency_rank <= 10
ORDER BY
  title
;

http://sqlfiddle.com/#!6/7283c/1

请注意,在链接的示例中,返回 12 行。 这是因为 4 个标题都并列第 9 位,实际上不可能确定应该优先选择哪两个。 在这种情况下,选择 10 行通常在统计上不正确。

title    frequency  frequency_rank
title06  2          9
title07  2          9
title08  2          9
title09  2          9
title10  3          6
title11  3          6
title12  3          6
title13  4          4
title14  4          4
title15  5          2
title16  5          2
title17  6          1

您可以使用WITH子句

with t AS 
( 
  select title,count(userid) as users from combined_moviedata
         group by title
  order by users desc limit 10
)
select * FROM t ORDER BY title ;

最新更新