MySQL中DENSE_RANK始终返回1?如何获取各国最受欢迎订阅类型
修正SQL以获取每个国家最受欢迎的Netflix订阅类型
你的SQL中DENSE_RANK的排序逻辑存在错误:ORDER BY子句里的(SELECT COUNT(*) as count_subscription FROM netflix)是计算整个表的总记录数,每个分组的这个值完全相同,因此所有行的排名都会被标记为1,导致每个国家返回所有订阅类型。
修正后的SQL语句
SELECT Country, Subscription_Type, count_subscription FROM ( SELECT Country, Subscription_Type, COUNT(*) as count_subscription, DENSE_RANK() OVER (PARTITION BY Country ORDER BY COUNT(*) DESC) as `rnk` FROM netflix GROUP BY Country, Subscription_Type ) as subscription_rank WHERE rnk = 1;
逻辑说明
- 内层查询先按
Country和Subscription_Type分组,计算每个国家每种订阅类型的用户数count_subscription DENSE_RANK()函数按Country分区,再根据count_subscription降序排序,这样每个国家里订阅数最多的类型排名为1- 外层筛选出排名为1的记录,得到每个国家最受欢迎的订阅类型(如果有多个类型订阅数相同,会同时返回并列结果)
如果需要强制每个国家只返回一行(并列时任选其一),可以将DENSE_RANK()替换为ROW_NUMBER(),但此操作会丢失并列的订阅类型信息,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者Shayma
相关产品推荐
相关产品推荐

