【问题标题】:Does mysql have the equivalent of Oracle's "analytic functions"?mysql是否有相当于Oracle的“分析功能”?
【发布时间】:2012-08-02 03:21:41
【问题描述】:

我正在 MySQL 中寻找像 PARTITION BY 这样的分析函数(有关更多信息,请参阅 docs

分析函数根据一组 行。它们与聚合函数的不同之处在于它们返回 每组多行。

它存在吗?

【问题讨论】:

  • 如果这类似于窗口函数,那么不是:en.wikipedia.org/wiki/…
  • 如果你想在开源数据库中使用窗口函数,你需要使用 PostgreSQL。

标签: mysql sql database oracle


【解决方案1】:

不,与 MSSQL、Oracle、PostgreSQL 等其他 DBMS 相比,这是 MySQL 的主要不足之一。我强烈怀疑将来会在 MySQL 中看到窗口函数,尤其是在 Oracle 收购 MySQL 之后...

2018 年 4 月更新

MySQL 8.0 现在支持window functions

【讨论】:

  • MySQL 也缺少递归查询
  • 是我遗漏了什么还是这篇文章描述了 mysql 的分析函数:explainextended.com/2009/03/10/… ????
  • 啊,现在我明白了,它是在描述分析函数,然后描述如何在 mysql 中实现没有它们的类似结果......
【解决方案2】:

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

【讨论】:

【解决方案3】:

只是想告诉你,你可以在 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. 有一个别名为 as _ 的“额外”列。使用结果时可以忽略此列,但@account检查和更改的顺序需要在@sum检查和更改之后。

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

资源:

【讨论】:

  • 这应该是公认的答案。我不明白为什么它会起作用,就像魔术一样哈哈。
【解决方案4】:

有一个用于 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 版本是免费的)

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2010-10-01
    • 2012-06-18
    • 2023-03-31
    • 1970-01-01
    • 2012-01-07
    • 2014-04-02
    • 2019-10-31
    相关资源
    最近更新 更多