每列不分组计数

  • 本文关键字: sql sql-server
  • 更新时间 :
  • 英文 :


我试图写一个查询,给我每个人都有一个给定列表中的课程,他们有什么课程,以及一列有多少人有这个特定的课程。但是,如果我使用计数功能,那么我必须按每一列分组,然后给出该人在学术表中对该课程有多少记录的计数。有没有一种方法可以让我只计算有特定课程的人数。下面是一个表格,其中有一个我想要的结果的示例。

tbody> <<tr>以利亚卡特汉娜
First_Name Last_Name People_id Curriculum courseum_count
奥利维亚scott123456ACC2
米勒234567ACC2
威尔逊345678总线1
沃克456789ENG3
卡米拉木材567890ENG3
annet铁试剂678901ENG3

要达到预期的结果,您需要使用子查询分别计算每个课程的人数。下面是一个应该工作的示例查询:

SELECT p.first_name, p.last_name, a.people_id, a.curriculum, c.curriculum_count
FROM academic a
JOIN people p ON p.people_id = a.people_id
JOIN (
SELECT curriculum, COUNT(DISTINCT people_id) AS curriculum_count
FROM academic
WHERE curriculum IN ('BUS', 'ACC', 'ENG')
GROUP BY curriculum
) c ON a.curriculum = c.curriculum
WHERE a.curriculum IN ('BUS', 'ACC', 'ENG')

子查询计算出现在学术表中的每个课程的不同人数。然后,主查询连接课程列上的子查询,将course_count列添加到结果中。

请注意,您仍然需要根据子查询和主查询中的三个特定课程进行筛选,否则您将获得学术表中所有课程的课程计数。

你想要一个窗口计数,例如

select
p.First_Name
, p.Last_Name
, a.People_Id
, a.Curriculum
, count(*) over (partition by a.Curriculum) Curriculum_Count
from academic a
join people p on p.People_Id = a.People_Id
where a.Curriculum in (
'bus',
'acc',
'eng'
);

注意表别名以提高可读性。

一致的大小写和命名使查询更容易阅读。

相关内容

  • 没有找到相关文章

最新更新