SQL 服务器计算具有相同值的记录数然后分组

SQL Server count number of records having the same value then group by

我有一个名为 ReportStats 的 table table 列是: IdMemberIdActionRecordId。 该操作的值可以是 create、change or deactivate 我想做的是计算每个 MemberId 每个动作的数量 这可能吗?

创建table

CREATE TABLE #ReportStats (Id INT IDENTITY(1, 1), MemberId INT, [Action] VARCHAR(10))

插入一些示例数据

INSERT INTO #ReportStats VALUES (1, 'create'),
                                (1, 'create'),
                                (1, 'change'),
                                (1, 'deactivate'),
                                (1, 'change'),
                                (1, 'deactivate'),
                                (2, 'create'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'deactivate')

一个简单的 COUNT(*)GROUP BY 就可以解决问题:

查询

SELECT
    MemberId,
    Action,
    COUNT(*) AS Cnt
FROM #ReportStats
GROUP BY MemberId, Action
ORDER BY MemberId

输出

MemberId    Action      Cnt
1           change      2
1           create      2
1           deactivate  2
2           change      4
2           create      1
2           deactivate  1

做同样事情的其他方法是使用 count 函数和 OVER 子句:

SELECT DISTINCT
    MemberId,
    Action,
    COUNT(*) OVER (PARTITION BY MemberID,Action) as CntAction
FROM #ReportStats