sql - 计数(不同)超过(分区)sql server 2016
问题描述
我有一张如下表
class_no | 学生卡 | 主题名称 |
---|---|---|
1 | 636 | 物理 |
1 | 636 | 化学 |
1 | 637 | 数学 |
1 | 638 | 德语 |
1 | 639 | 物理 |
Create table #T_Test(
class_no int
,student_id int
,subject_name nvarchar(25)
);
Insert into #T_Test ([class_no],[student_id],[subject_name]) values
(1,636,'Physics'),
(1,636,'Chemistry'),
(1,637,'Maths'),
(1,638,'German'),
(1,639,'Physics')
我想得到不同student_id的计数,也计算grouped_by subject_names
class_no | 主题名称 | total_subjects | 学生总数 |
---|---|---|---|
1 | 物理 | 2 | 4 |
1 | 化学 | 1 | 4 |
1 | 数学 | 1 | 4 |
1 | 德语 | 1 | 4 |
1 | 物理 | 1 | 4 |
以下是我到目前为止所做的,如何获得结果集中包含的不同计数(student_id)
SELECT DISTINCT t.class_no
,t.subject_name
,count(*) total_subject
FROM #T_Test t
WHERE t.class_no = 1
GROUP BY t.class_no,subject_name
解决方案
通过使用这个小dense_rank
技巧,无需多次点击表格即可获得科目的汇总和不同的学生人数:
with s as (
select class_no, subject_name,
Dense_Rank() over (partition by class_no order by student_id) +
Dense_rank() over (partition by class_no order by student_id desc) - 1 Students
from #T_Test
)
select class_no, subject_name,
Count(*) Total_Subjects,
Max(students) Total_Students
from s
group by class_no, subject_name
推荐阅读
- c# - 如何在 ASP.NET 的选择框中将我的模型字段设置为选定的值?
- kubernetes - 使用 Ansible 在 Pod 达到一定年龄时删除 DeploymentConfig
- c++ - 如何将带有参数包的模板类作为参数传递给其他模板类?
- css - 如何将绝对定位的文本对齐到行中?
- typescript - 使用带有 lit-html 的打字稿编写测试时出现“语法错误:无法在模块外使用 import 语句”
- sharepoint-online - 更改新站点的默认语言
- azure - 使用 C# 创建 IoT Edge 设备
- python-3.x - 删除子串
- angular - 订阅 websocket 时无法执行功能
- r - 使用分隔融化数据框并从一行创建多行