【问题标题】:How to sum a column over a subset of rows in MYSQL如何在 MYSQL 中的行子集上对列求和
【发布时间】:2026-02-16 01:35:01
【问题描述】:

我希望我能以一种可以理解的方式描述我的问题。

所以我得到了一个这样的日志事件表:

id event count marker
1 EVENT 1 3 false
2 EVENT 1 2 false
3 EVENT 2 4 false
4 EVENT 1 1 true
5 EVENT 1 6 false
6 EVENT 1 2 true
7 EVENT 1 5 false
8 EVENT 2 3 true
9 EVENT 1 3 false
10 EVENT 2 5 false

我想要的是比每个事件不同的列标记中最后一次出现 true 的所有行的“计数”列的总和。

我能够像这样单独获得每个事件的结果(例如“事件 1”):

select sum(count) from test_table
    where event='EVENT 1'
    and id > (select id from test_table 
    where event='EVENT 1' 
    and marker=1
    order by id desc limit 1);

此查询的结果将是 8(第 7 行和第 9 行的总和),对于“事件 2”的查询分别为 5(第 10 行的总和)。

但现在我想在一个查询中得到这些结果,如下所示:

event sum
EVENT 1 8
EVENT 2 5

这可能吗?我玩了一下窗口函数,但没有得到想要的结果。

希望有人能帮帮我。

问候 弗兰克

【问题讨论】:

    标签: mysql sql window-functions


    【解决方案1】:

    我想要的是比每个事件不同的列标记中最后一次出现 true 的所有行的“计数”列的总和。

    一种方法是:

    select event, sum(count)
    from t
    where id > (select max(t2.id) from t t2 where t2.event = t.event and marker)
    group by event
    

    【讨论】:

    • Argl ... 没想到会这么简单 :D。非常感谢您的快速回答!