SQL 服务器计算具有相同值的记录数然后分组
SQL Server count number of records having the same value then group by
我有一个名为 ReportStats 的 table
table 列是:
Id、MemberId、Action 和 RecordId。
该操作的值可以是 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
我有一个名为 ReportStats 的 table table 列是: Id、MemberId、Action 和 RecordId。 该操作的值可以是 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