是否有一个 SQL 查询将计算事件的发生次数而不按被计数的事件对数据进行分组?

Is there an SQL query that will count the number of occurrences of an event WITHOUT grouping the data by the event being counted?

请注意,我是在 MS Access 中执行此操作,因此将不胜感激使用基本 SQL 运算符的解决方案。

假设您有一个 table,其中每一行代表一系列抛硬币中的一次抛硬币。

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

SELECT * FROM CoinFlips;

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

您将如何编写一个查询 returns 以上所有行以及一个附加列,该列计算在该行出现之前发生的 '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

要在 MS Access 中执行此操作,您需要相关子查询或 join/aggregation。其他数据库直接支持此功能,但 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;

这是一个解决方案

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;