首页 > 解决方案 > 如何按每个学生 ID 计算组的总数

问题描述

GROUP        STUDENT    COUNT OF GROUP FOR EACH STUDENT
GROUP A      ST 1       1
GROUP A      ST 2       2
GROUP B      ST 2       2
GROUP A      ST 3       2
GROUP B      ST 3       2
GROUP B      ST 3       2

如何计算一个学生进入一个小组的次数。前任。ST 1 只有一个 A 组条目,但 ST2 和 ST3 有 2 个组条目,与行无关。

请任何人帮助此 SQL 代码。谢谢

在此处输入图像描述

标签: sqlsql-servertsqlgroup-by

解决方案


理想情况下,您希望count(distinct)作为窗口函数:

select t.*, 
       count(distinct group) over (partition by student) as cnt_group
from t;

但是 SQL Server 不支持distinct窗口函数。相反,您可以使用解决方法的总和dense_rank()

select t.*,
       (-1 + 
        dense_rank() over (partition by student order by group asc) +
        dense_rank() over (partition by student order by group desc)
       ) as num_groups
from t;

推荐阅读