【问题标题】:Window function syntax error at over clauseover 子句中的窗口函数语法错误
【发布时间】:2022-01-27 05:26:15
【问题描述】:

我正在解决一个hackerrank SQL 问题,您可以在 [这里][1] 看到它,我已经使用其他方法解决了它,但我想尝试同样的窗口函数,所以我运行了一个基本查询了解窗口函数。

SELECT salary, SUM(salary) OVER (ORDER BY salary) AS running_total
FROM Employee;

但我收到以下错误。

第 4 行出现 ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在 '(ORDER BY Salary) AS running_total FROM 附近使用正确的语法 第 2 行的员工

我很困惑为什么它会抛出错误。 P.S:我上面发布的查询并没有解决问题,只是尝试理解窗口函数,如果您可以使用窗口函数解决整个问题并将其写在答案中,也将帮助我了解更多信息。如果您需要更多详细信息,请在 cmets 中提及。

Table name- Employee
columns:
employee_id-> integer
name-> string
months-> integer
salary-> integer

Mysql 版本 - 8.0.20 [1]:https://www.hackerrank.com/challenges/earnings-of-employees/problem?isFullScreen=true

【问题讨论】:

  • 你的mysql版本是多少?
  • 您能提供一些示例数据并期待结果吗?
  • 看起来你的 MySQL 是 5.x,它没有实现窗口函数。升级到 8+ 版本。
  • @D-Shih 问题中也提到了,再一次,hackerrank.com/challenges/earnings-of-employees/…
  • @Akina idk 版本,因为它是 HackerEarth 的默认 SQL IDE。

标签: mysql sql


【解决方案1】:

很可能,您的 MySQL 版本低于 8+,因此不支持窗口函数。这是您当前查询的替代方案,应该在您的 MySQL 版本上运行:

SELECT
    salary,
    (SELECT SUM(e2.salary) FROM Employee e2
     WHERE e2.salary <= e1.salary) AS running_total
FROM Employee e1
ORDER BY salary;

【讨论】:

  • 谢谢@Tim Biegeleisen,但我想知道我是否可以使用窗口函数解决问题?如果可能的话,我想要窗口函数版本的答案。
  • ...你已经用窗口函数解决了问题,只是你的MySQL版本不支持语法。
猜你喜欢
  • 2020-06-03
  • 2017-12-27
  • 2016-02-11
  • 2017-02-07
  • 1970-01-01
  • 2018-08-10
  • 2021-07-02
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多