17
4

4 回答 4

20

只是想告诉你,你可以在 MySQL 中使用变量来模拟分析函数。例如,SUM OVER 可以按如下方式完成:


SELECT amount, 
    @sum := @sum + amount as sum 
FROM tbl
JOIN (SELECT @sum := 0) s

如果你想PARTITION BY,它是可能的,但只是有点复杂。基本上,您添加另一个@variable来监视帐户(或您想要分区的任何内容),按帐户(或您的变量)排序,然后@sum在帐户更改时重置。如下:


SELECT account, 
    amount, 
    (case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
    (case when @account != account then @account := account else @account end) as _
FROM (SELECT * FROM tbl ORDER BY account)
JOIN (SELECT @sum := 0) s
JOIN (SELECT @account := '') a

您会注意到为实现分区效果必须进行的两个主要更改:

  1. 主表 ( tbl) 包含在带有ORDER BY子句的子选择中。这是必要的,因为当 MySQL 进行@account变量测试时,值需要已经被排序。如果这没有发生,您将得到不正确的总和值以及帐户值。

  2. 有一个别名为 'extra' 的列as _。使用结果时可以忽略此列,但检查和更改的顺序@account需要在@sum检查和更改之后。

    此外,如果您不介意帐户排在最后,您可以选择重新排序列。这是通过取出第一account列来完成的,因为它与最后一列重复,_然后显然将别名重命名_account.

资源:

于 2013-12-06T19:49:22.910 回答
17

不,与 MSSQL、Oracle、PostgreSQL 等其他 DBMS 相比,这是 MySQL 的主要缺陷之一。我强烈怀疑将来会在 MySQL 中看到 Window Functions,尤其是在 Oracle 收购 MySQL 之后……

更新 04/2018

MySQL 8.0 现在支持窗口函数

于 2012-08-04T07:33:43.903 回答
0

虽然 MySQL 不支持分析函数,但MariaDB支持。它是 MySQL 的直接替代品,由 MySQL 的原始开发人员创建。

于 2017-08-21T10:05:42.397 回答
-5

有一个用于 SQL Server 的商业产品,它提供数据库内分析功能,它可以通过“链接服务器”/odbc 连接到 oracle 或 MySQL 数据库 - 这是一篇描述它的文章: http ://westclintech.com/Blog /tabid/132/EntryId/88/Using-XLeratorDB-with-MySQL-and-other-RDBMS-s.aspx

这需要有 Windows o/s 和 SQL Server 2005 或更高版本(Express 版本是免费的)

于 2012-08-31T13:31:23.790 回答