LeetCode 中的 SQL 语法错误排名分数
Posted
技术标签:
【中文标题】LeetCode 中的 SQL 语法错误排名分数【英文标题】:SQL syntax error ranking scores in LeetCode 【发布时间】:2019-08-13 23:36:40 【问题描述】:我想解决这个 LeetCode 问题,https://leetcode.com/problems/rank-scores/,按照文档中的这个示例使用 mysql (https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_rank):
SELECT score, RANK() OVER w as 'rank'
FROM scores
WINDOW w AS (ORDER BY score DESC);
我创建了一个可以正常工作的测试数据库(使用 Django ORM):
mysql> SELECT score, RANK() OVER w as 'rank' FROM scores WINDOW w AS (ORDER BY score DESC);
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 3 |
| 3.65 | 4 |
| 3.65 | 4 |
| 3.50 | 6 |
+-------+------+
6 rows in set (0.00 sec)
但是,如果我在 LeetCode 中输入这个,我会得到一个语法错误:
知道这里有什么问题吗?也许RANK()
是LeetCode上的MySQL版本还没有的新功能?
【问题讨论】:
语法错误到底是什么? 单击该下拉列表中“MySQL”左侧的“i”,您将获得“Run with mysql-server 5.7.21.”。 MySQL 5.7 不支持窗口函数。尝试使用另一个 DBMS(但您可能需要将'rank'
别名更改为不使用引号或双引号 - 将标识符括起来的正确方法是在 SQL 中)或更改您的查询以不使用窗口函数。跨度>
【参考方案1】:
MySql 5.7.21 不支持排名。只有从 Mysql 8 开始,我们可以使用 rank 函数,你可以试试下面的查询
SELECT Score,
(SELECT count(1) FROM (SELECT distinct Score s FROM Scores) tmp WHERE s >= Score) 'rank'
FROM Scores
ORDER BY Score desc
【讨论】:
以上是关于LeetCode 中的 SQL 语法错误排名分数的主要内容,如果未能解决你的问题,请参考以下文章
⭐️ LeetCode解题系列 ⭐️ 178. 分数排名(Oracle dense_rank函数)