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:分数排名

Leetcode No.178 分数排名

⭐️ LeetCode解题系列 ⭐️ 178. 分数排名(Oracle dense_rank函数)

⭐️ LeetCode解题系列 ⭐️ 178. 分数排名(Oracle dense_rank函数)

LeetCode SQL练习1

phpmyadmin 事件语法错误,而它适用于 sql 命令