我有一些事件流入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/