我想找到具有大量用户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 ;