通过分组设置列数

时间:2019-06-14 07:50:48

标签: sql sql-server tsql

我有一个user表,其中包含诸如action执行哪个activities之类的信息。每个用户可以在其中执行多项操作。

我想从 SELECT COUNT(*) FROM ( SELECT MAX(action_id) AS action_id FROM activities GROUP BY participant_id ) T GROUP BY action_id 表中选择执行的每个动作的计数。

我写了类似的查询

FilteringStack

它可以工作,但是我不确定这是否是解决问题的最佳方法。

2 个答案:

答案 0 :(得分:0)

这给您错误的数据。您不会得到“执行的每个动作的次数”。,但是每个用户的动作ID最高的每个动作的次数

删除participant_id部分,即可简化查询(并修复):

SELECT action_id,
       COUNT(*) AS Count
FROM activities
GROUP BY action_id

答案 1 :(得分:0)

您的问题对您要完成的工作很含糊。解决方案似乎是 id 的聚合。以下计算行数和参与者数:

SELECT action_id,
       COUNT(*) as num_actions,
       COUNT(DISTINCT participant_id) as num_participants
FROM activities
GROUP BY action_id;

如果您希望每个参与者 的操作次数,它看起来像:

SELECT participant_id,
       COUNT(*) as num_actions
FROM activities
GROUP BY participant_id;