Dense_Rank 不断将每一行返回为 1?

问题描述 投票:0回答:1

我正在 MySQL 上使用来自 Kaggle 的 Netflix 数据集。数据集包含 Country、Subscription_Type、Age、Gender、Monthly_Revenue 等字段。在 Subscription_Type 列中,可能的返回字段为 Basic、Standard、Premium。我正在尝试找到每个国家/地区最常见的订阅类型,因此最好每个国家/地区都有一个结果。

SELECT * 
FROM (
    SELECT Country,
            Subscription_Type, 
            COUNT(*) as count_subscription, 
            DENSE_RANK() OVER (PARTITION BY Country ORDER BY (SELECT COUNT(*) as count_subscription FROM netflix) ) as `rnk`
    FROM netflix
    GROUP BY Country, Subscription_Type
) as subscription_rank
WHERE rnk = 1; 

我遇到的问题是 Dense_Rank 将每行排名为 1,因此每个国家/地区最终得到三个结果。我该如何解决这个问题,以便我能够获得每个国家/地区最受欢迎的订阅类型?

sql mysql window-functions dense-rank
1个回答
0
投票

子查询是无意义的:它不相关,因此每行返回相同的结果。

而且,没有必要。窗口函数在聚合之后工作,因此您可以直接使用COUNT(*)

SELECT * FROM ( SELECT nf.Country, nf.Subscription_Type, COUNT(*) as count_subscription, DENSE_RANK() OVER (PARTITION BY nf.Country ORDER BY COUNT(*)) as rnk FROM netflix nf GROUP BY nf.Country, nf.Subscription_Type ) as subscription_rank WHERE rnk = 1;
我可能错了,但也许你想要

COUNT(*) DESC

?此外 
DENSE_RANK
 将返回并列结果,而 
ROW_NUMBER
 则不会。

© www.soinside.com 2019 - 2024. All rights reserved.