You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode 178. Rank Scores:SQL子查询返回多行错误解惑

解答LeetCode 178. Rank Scores的SQL错误问题

问题1:哪段语法导致子查询返回多行错误?

错误根源是子查询中的COUNT(DISTINCT s2.score)部分。

你原本想计算大于等于当前分数的不同分数数量,但错误引用了外层表s2的score列。尽管COUNT是聚合函数,但这里的s2.score是外层查询的关联值,数据库解析时无法将该子查询正确识别为返回单一值的标量子查询,反而因逻辑冲突返回多行结果,触发Subquery returns more than 1 row错误。

问题2:为什么修改DISTINCT后的表别名可以解决问题?

将DISTINCT s2.score改为DISTINCT s1.score后,子查询逻辑回归正确:统计s1表中所有分数大于等于当前s2.score的不同分数的数量,完全匹配题目要求的「同分同排名、无空缺连续排名」规则。

此时COUNT(DISTINCT s1.score)是针对子查询内部s1表的列做聚合统计,无论s1有多少行满足s1.score >= s2.score的条件,聚合函数都会返回一个单一数值,作为标量子查询结果与外层每一行s2.score对应,自然不会出现返回多行的错误。

正确的SQL代码

SELECT  s2.score,  
        (SELECT COUNT(DISTINCT s1.score) 
         FROM Scores s1                 
         WHERE s1.score >= s2.score) AS `rank`
FROM Scores s2
ORDER BY score DESC

内容的提问来源于stack exchange,提问作者statistics_learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:10:40