是否有一个SQL查询可以计算事件的发生次数而不计算事件的数据分组?

时间:2015-07-21 18:24:24

标签: sql database ms-access ms-access-2010

请注意,我在MS Access中执行此操作,因此可以使用基本SQL运算符的解决方案。

假设你有一张表,其中每一行代表一系列硬币翻转中的硬币翻转。

免责声明:我使用硬币翻转作为类比,因此我不必解释我的实际数据集。

SELECT * FROM CoinFlips;

Id    Flip     Time
-------------------
1     Heads      1
2     Tails      2
3     Heads      3
4     Heads      4  
5     Heads      5
6     Tails      6

您如何编写一个返回上述所有行的查询,其中包含一个计算' head'发生在该行发生之前的翻转。换句话说,这就是我想要的结果:

所需输出

Id    Flip     Time   NumHeads
--------------------------------
1     Heads      1       1
2     Tails      2       1
3     Heads      3       2
4     Heads      4       3
5     Heads      5       4
6     Tails      6       4

2 个答案:

答案 0 :(得分:1)

要在MS Access中执行此操作,您需要相关子查询或加入/聚合。其他数据库直接支持此功能,但不支持MS Access。

select cf.*,
       (select count(*)
        from CoinFlips as cf2
        where cf2.flip = 'Heads' and cf2.id <= cf.id
       ) as NumHeads
from CoinFlips as cf;

答案 1 :(得分:0)

这里有一个解决方案

SELECT coinFlips.ID
,coinFlips.Flip
,coinFlips.TIME
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='Heads'") AS CountHeads
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='" & [Flip] & "'") AS CountEachOccurence
FROM coinFlips;