我有一些事件流入MySQL数据库,我需要将这些事件分组并汇总到事务中,然后存储到另一个表中。数据看起来像:

+----+---------+------+-------+
| id | transid | code | value |
+----+---------+------+-------+
|  1 |       1 | b    |    12 |
|  2 |       1 | i    |    23 |
|  3 |       2 | b    |    34 |
|  4 |       1 | e    |    45 |
|  5 |       3 | b    |    56 |
|  6 |       2 | i    |    67 |
|  7 |       2 | e    |    78 |
|  8 |       3 | i    |    89 |
|  9 |       3 | i    |    90 |
+----+---------+------+-------+

事件成批到达,我想通过总结每个transid的值来创建事务,例如:
select transid, sum(value) from eventtable group by transid;

但只有在那次旅行的所有事件都发生之后。这是由代码为e的事件决定的(b代表开始,e代表结束,i代表不同数量的中间产物)。作为SQL中的新手,在求和之前,如何实现对结束代码存在的要求?

最佳答案

可能是用having

select transid, sum(value)
from eventtable
group by transid
having max(case code when 'e' then 1 end)=1;

关于mysql - 一旦所有值都可用,就对SQL中的值求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13701348/

10-10 06:48