MySQL 和窗口函数

Cra*_*lus 30 mysql window-functions

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

Shl*_*ach 36

MySQL 不支持窗口函数(*)。GROUP_CONCAT()的形式就是我们所说的“穷人的窗口函数” 。

有很多技巧可以GROUP_CONCAT用来模拟窗口函数。它们不那么漂亮(在语法上),有时也太有限了。我写了几个。请参阅我的博客文章,抱怨缺少窗口功能,并链接到基于GROUP_CONCAT.

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

您应该注意的事项GROUP_CONCAT()

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

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


chx*_*chx 11

确实应该注意的是,MariaDB 10.2(2017 年 5 月发布)具有窗口函数。如果您需要 MySQL 和窗口函数,这当然是一种途径。