【问题标题】:MySQL aggregation function to sum the differences from row to rowMySQL聚合函数来总结行与行的差异
【发布时间】:2011-12-05 08:16:35
【问题描述】:

我有这个小 mysql 表:

+----+-------+
| id | value |
+----+-------+
|  1 |  1240 |
|  2 |  1022 |
|  3 |   802 |
| .. |    .. |
+------+-----+

我正在搜索总结行之间差异的 sql 查询:

第 1 行和第 2 行的差异 + 第 2 行和第 3 行的差异 + ...

用 sql 可以吗?

【问题讨论】:

    标签: mysql sql aggregate-functions aggregation


    【解决方案1】:

    当然!您的查询将如下所示:

    SELECT a.id, 
           b.VALUE - a.VALUE difference 
    FROM   mytable a 
           JOIN mytable b 
             ON b.id = a.id + 1 
    

    这个想法是加入表格,使其自身偏移一行 - 然后您可以使用最初位于相邻行上的值进行数学运算。

    【讨论】:

    • 可能值得做一个内部连接,这样最后一条记录就不会混淆......
    • +1 简洁优雅。请务必查看@MattFellows 的评论
    • 这里有一个隐含的假设,即 id 是连续的。如果您的 id 有任何空白,例如,由于删除,这可能会让您失望。
    • @matt 是的,它已经是一个内部连接...... mysql 将未指定的连接解释为内部连接。 (discussed here)
    • @RedFilter MySQL 支持滞后/领先,因此无需这样做。 select id, value - lag(value) over ( partition by id ) from my_table 是等效的,您不需要加入。它删除了连续的参数。
    猜你喜欢
    • 2021-10-21
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多