如何按每个学生ID计算组的总数[关闭]
Posted
技术标签:
【中文标题】如何按每个学生ID计算组的总数[关闭]【英文标题】:How to count total for groups by each student id [closed] 【发布时间】:2021-10-23 06:31:36 【问题描述】: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 代码。 谢谢
【问题讨论】:
根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。并且请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:理想情况下,您希望 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;
【讨论】:
【参考方案2】:这是你找到所有关系的方法
SELECT DISTINCT [GROUP], STUDENT
FROM yourtable
现在,让我们汇总一下
SELECT COUNT(*)
FROM (
SELECT DISTINCT [GROUP], STUDENT
FROM yourtable
) t
GROUP BY STUDENT;
【讨论】:
【参考方案3】:用窗口函数伪造COUNT(DISTINCT
的另一种方法是使用DENSE_RANK
,然后使用MAX
窗口函数
SELECT
t.student,
t.[group],
CountGroups = MAX(rnk) OVER (PARTITION BY t.student)
FROM (
SELECT *,
rnk = DENSE_RANK() OVER (PARTITION BY t.student ORDER BY t.[group])
FROM t
) t;
【讨论】:
为什么都是粗体?你在喊吗!?以上是关于如何按每个学生ID计算组的总数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章