MySQL似乎不支持窗口功能。
例如很简单:COUNT(*) OVER() AS cnt不起作用。
我不确定这是否也适用于商业版本(我认为社区版本是有限子集)。
如果不可行,如何解决这个问题?缺少功能?

评论

在任何有意义的意义上,MySQL Server社区版都不是一个有限的子集。差异在于不影响核心功能的加载项和插件。

在这里和这里看看这个解决方法

实际上,MySQL9支持它。我一直在用熊猫来代替那种烂。

MySQL 8支持窗口功能。供参考:dev.mysql.com/doc/refman/8.0/en/window-functions.html

从8.0版本开始,MySQL支持窗口功能。此链接可能会有所帮助。

#1 楼

MySQL不支持Window Functions(*)。我们称之为GROUP_CONCAT()形式的“穷人的窗户功能”。

有很多技巧可以使用GROUP_CONCAT模拟窗户功能。它们不那么漂亮(在语法上),有时太有限。我写了一些。请参阅我的博客文章抱怨缺少窗口函数,并链接到基于GROUP_CONCAT的各种解决方案。

尤其是在GROUP BY和SQL中选择特定的非聚合列数据:每个组选择前N条记录,那么您可能会感兴趣的另一种解决方案可能是您入门。

关于GROUP_CONCAT()的注意事项:


可以使用DISTINCT

可以使用ORDER BY ... ASC/DESC

可以将SEPARATOR设置为

作为任何聚合函数-它会丢弃NULL值;

(*)MySQL 8中已添加了对窗口函数的支持

评论


MySQL从版本8开始支持窗口功能

–最大
18年8月23日在16:12

GROUP_CONCAT不是窗口函数,它是有序集合函数。

– SQLRaptor
18年9月3日在17:12

@SQLRaptor没有人声称是。

–超立方体ᵀᴹ
18-09-3在20:41

#2 楼

应当特别指出的是,MariaDB 10.2(于2017年5月发布)具有窗口功能。如果您需要MySQL和窗口函数,那肯定是追求的途径。