MySQL和窗口函数


30

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


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


实际上,MySQL9支持它。我一直在用大熊猫代替。
Andrew Scott Evans

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

从8.0版开始,MySQL支持窗口功能。该链接可能会有所帮助。
哈米德·莫海吉

Answers:


36

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

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

特别是,在GROUP BYSQL中选择特定的非聚合列数据:选择每个组的前N条记录,您可能会感兴趣另一种解决方案,它可以为您提供一个良好的开端。

您应该注意的事项GROUP_CONCAT()

  • 可以使用 DISTINCT
  • 可以使用 ORDER BY ... ASC/DESC
  • 可以设定 SEPARATOR
  • 与任何聚合函数一样,它会丢弃NULL值;很多技巧。

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


MySQL支持窗口功能版本8
马克斯

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

1
@SQLRaptor没有人声称是。
ypercubeᵀᴹ

11

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.