【问题标题】: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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多