【问题标题】:MySQL Running Total return empty values [closed]MySQL Running Total 返回空值
【发布时间】:2020-09-04 20:43:32
【问题描述】:
table values
------
100
50
100
50
<?php
$sth = $DB->prepare('
    SELECT  ( @runnningtotal :=  @runnningtotal + values) FROM table 
    ');
$sth->execute();


print("All rows:\n");
$result = $sth->fetchAll();
print_r($result);
?>

我的代码有什么问题?为什么@runnningtotal 返回空值?

【问题讨论】:

    标签: mysql sql sum window-functions


    【解决方案1】:

    需要先初始化变量;您可以在运行查询之前使用SET 命令执行此操作,或者在查询中使用CROSS JOIN 执行此操作。

    此外,为了获得稳定的结果,您需要一列来定义应处理的行的顺序(我在查询中将其表示为 id) - 我建议对值进行预排序首先是子查询:

    SELECT @runnningtotal := @runnningtotal + t.val as running_sum
    FROM (SELECT val FROM mytable ORDER BY id) t
    CROSS JOIN (SELECT @runnningtotal := 0) r
    

    计划在未来的 MySQL 版本中弃用用户变量。同时,MySQL 8.0 增加了窗口函数,这使得这项任务变得更加容易和高效:

    SELECT SUM(val) OVER(ORDER BY id) running_sum
    FROM mytable
    

    【讨论】:

    • 你救了我的命,非常感谢。我只添加了CROSS JOIN (SELECT @runnningtotal := 0) x,它可以工作。
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2012-01-13
    相关资源
    最近更新 更多