首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:如何不使用秩()来理解解决方案代码?

问SQL:如何不使用秩()来理解解决方案代码?
EN

Stack Overflow用户
提问于 2020-08-29 16:03:38
回答 2查看 123关注 0票数 0

有人能向我解释一下为什么密码会起作用吗?问题是leetcode 178分(https://leetcode.com/problems/rank-scores/)。

代码语言:javascript
复制
SELECT
  Score,
  (SELECT count(distinct Score) FROM Scores WHERE Score >= s.Score) Rank
FROM Scores s
ORDER BY Score desc

我的问题是关于这一部分:(SELECT count(distinct Score) FROM Scores WHERE Score >= s.Score) as Rank

为什么它会像1,2,3这样的排名.像枚举一样,而不仅仅是数到4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-29 16:10:10

最重要的一点是SQL有一个内置函数来进行排序。这对于学习SQL,进而理解这段特定代码的工作原理更为重要。

但是,如果要使用关联子查询,那么对查询中的所有列引用进行限定是非常重要的。因此,查询应该如下所示:

代码语言:javascript
复制
SELECT s.Score,
       (SELECT count(distinct s2.Score)
        FROM Scores s2
        WHERE s2.Score >= s.Score
--------------^ correlation clause "connects" the subquery to the outer query
       ) as Rank
FROM Scores s
ORDER BY s.Score desc;

此代码计算大于或等于特定分数的值的数目。这就是关联子句的工作方式。子查询是计算外部查询中大于或等于每个分数的不同分数的数目。如果您不理解这一点,您需要更多地了解相关子查询;从数据库的文档开始。

请注意,在SQL术语中,这是dense_rank()。使用这个函数既简单又应该有更好的效果。

票数 0
EN

Stack Overflow用户

发布于 2020-08-30 08:43:42

下面的mysql代码将像mysql中的dense_rank()一样工作-

代码语言:javascript
复制
SELECT  IF(score <> @pscore,@i:=@i+1,@i:=@i) AS rank,
  @pscore := score AS score
 FROM scores p ,(SELECT @i := 0,@pscore := 0) r
ORDER BY score desc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63649062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档