如何解决MySQL运行总计返回空值
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返回空值?
解决方法
您需要先初始化变量;您可以在运行查询之前使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。