如何使“SUM(amount) over”窗口函数在 MySQL 5.7 中工作?
Posted
技术标签:
【中文标题】如何使“SUM(amount) over”窗口函数在 MySQL 5.7 中工作?【英文标题】:How to make "SUM(amount) over" window function work in MySQL 5.7? 【发布时间】:2020-08-22 22:19:34 【问题描述】:我有以下 MariaDB SQL 语句需要转换为 mysql 语句
SELECT *,
SUM(amount) over (partition by voteid order by allocationid) AS TotalAmountAvailable
FROM allocation
我收到以下错误消息:
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“(按 voteid order by allocationid 分区)AS TotalAmountAvailable FROM alloca”附近使用正确的语法
我公司的实时服务器具有以下设置:
Database server - Server: Localhost via UNIX socket
Server type: MySQL
Server version: 5.7.25-0ubuntu0.16.04.2 - (Ubuntu)
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)
【问题讨论】:
MariaDB 使用与 MySQL 相同的 SQL 风格。您指的是任何特定版本的 MySQL 和缺少的功能吗? 由于某种原因,即使它可能是相同的味道,它也无法正常工作。我相信MYSQL版本是5.7 不工作不是一个非常有用的短语。您是否看到任何结果或错误? 错误静态分析:分析时发现1个错误。之前发现了一个别名。 (在位置 75 的“TotalAmountAvailable”附近) SQL 查询:文档 SELECT *, SUM(amount) over (partition by voteid order by allocationid) AS TotalAmountAvailable FROM allocation LIMIT 0, 25 MySQL 说:文档 #1064 - You have an error in your SQL 语法;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 2 行的 '(partition by voteid order by allocationid) AS TotalAmountAvailable FROM alloca' 附近使用 【参考方案1】:据我了解,问题出在窗口 sum()
上,MySQL 5.7 不支持该窗口(虽然它在 MariaDB 开始版本 10.2 中可用)。
您可以将其重写为相关子查询:
select
a.*,
(
select sum(amount)
from allocation a1
where a1.voteid = a.voteid and a1.allocationid <= a.allocationid
) TotalAmountAvailable
from allocation a
【讨论】:
美好的一天,所以我的原始查询如下所示如何将此查询的结果与我的原始完整查询合并。我知道我没有发布没有 sum 分区等的原始查询。希望你明白我的意思:) SELECT *, u1.user_name AS 'Created', u2.user_name AS 'Modified', u3.user_name AS 'Certified', SUM(amount) over (partition by voteid order by allocationid) AS TotalAmountAvailable , allocation.date_modified AS 'DateModified', allocation.date_created AS 'DateCreated' FROM allocation INNER JOIN user_details u1 ON allocation.created_by = u1.user_id LEFT JOIN user_details u2 ON allocation.modified_by = u2.user_id LEFT JOIN user_details u3 ON allocation.checking_officer = u3.user_id @Ria:这不是您最初提出的问题。您可能想为此提出一个新问题。以上是关于如何使“SUM(amount) over”窗口函数在 MySQL 5.7 中工作?的主要内容,如果未能解决你的问题,请参考以下文章