sql—如何从一列中获取前10名并按配置单元中的另一列排序?

rdrgkggo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(419)

我想找到前10名标题与大量的用户ID。所以我用了 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 但它并没有对它们进行分类。只是返回了相同的结果。如何做到这一点

8cdiaqws

8cdiaqws1#

你可以利用 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 ;
chhkpiq4

chhkpiq42#

来自@kaushiknayak的答案非常接近我认为的“正确”答案。
在一个层次上,找出你的前十大记录是什么
在不同的级别上,按不同的字段对它们进行排序
我唯一要说的是,如果第十和第十一最常见的标题是并列为同一计数,他们一般也应该包括在结果中。这是一个 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

相关问题