【问题标题】:Calculate total in SQL from two different rows by date按日期从两个不同的行计算 SQL 中的总计
【发布时间】:2020-09-17 10:07:55
【问题描述】:
我有一个表:date、daily_count 和 total_count,total_count 是空的,必须用 MySQL 计算。日期和daily_count 是已知的,我想从daily_count(today) + total count(yesterday) 计算今天的total_count。
我可以这样计算:
SELECT t2.daily_count + t1.total_count total
FROM mytbl t1, mytbl t2
WHERE t1.date = '2020-2-27' AND t2.date = '2020-2-28'
对于包含一年以上数据且只有日期和每日计数的表,我如何才能立即执行此操作。所以必须计算所有的总计数。后来我想将总数更新为 mytbl 中的 total_count。还是我有两个写下一年数据的不同日期的所有 365 SQL 行?
【问题讨论】:
标签:
mysql
sql
group-by
sum
window-functions
【解决方案1】:
如果您运行的是 MySQL 8.0,您可以使用窗口函数轻松完成此操作:
select date, daily_count, sum(daily_count) over(order by date) total_count
from mytbl
您可以将其转换为update 查询,如下所示(假设date 是唯一列):
update mybtl t
inner join (
select date, sum(daily_count) over(order by date) total_count
from mytbl
) t1 on t1.date = t.date
set t.total_count = t1.total_count
【解决方案2】:
对于累积总和,您可以执行以下操作:
SET @t=0;
SELECT daily_count,@t:=@t+daily_count FROM mytbl ORDER BY mytbl.date;
更新也可以做到这一点。使用ORDER BY确保处理顺序正确。
SET @t=0;
UPDATE mytbl SET total_count=@t:=@t+daily_count ORDER BY mytbl.date;