MySQL
似乎不支持窗口功能。例如很简单:
COUNT(*) OVER() AS cnt
不起作用。我不确定这是否也适用于商业版本(我认为社区版本是有限子集)。
如果不可行,如何解决这个问题?缺少功能?
#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
评论
在任何有意义的意义上,MySQL Server社区版都不是一个有限的子集。差异在于不影响核心功能的加载项和插件。在这里和这里看看这个解决方法
实际上,MySQL9支持它。我一直在用熊猫来代替那种烂。
MySQL 8支持窗口功能。供参考:dev.mysql.com/doc/refman/8.0/en/window-functions.html
从8.0版本开始,MySQL支持窗口功能。此链接可能会有所帮助。