如何查找组中另一组的计数

Posted

技术标签:

【中文标题】如何查找组中另一组的计数【英文标题】:How to find the count of another group in a group 【发布时间】:2021-04-03 20:53:24 【问题描述】:

我无法在标题中清楚地解释问题,但这就是问题所在。

我正在使用 SQL Server。

我有一张包含大学和学科的表格。

University     Subject

Melbourne      Math
Melbourne      Physics
Melbourne      English

Ottawa         Physics
Ottawa         English
Ottawa         Arts
Ottawa         Computer

Sydney         Math
Sydney         Medicine
Sydney         English
Sydney         Computer
.
.
.

我想在一个 select 语句中做一些计算

这是我的 SQL

SELECT Subject, Count(*) SubjectsCount
FROM Table
GROUP BY Subject

给予

Subject SubjectsCount
Math       39
Physics    23
English    47
Medicine   13

我想在同一个查询中找到不同大学的数量

Subject SubjectsCount UniversitiesNo 
Math       39           52
Physics    23           52
English    47           52
Medicine   13           52

我试过了

SELECT Subject, Count(*) SubjectsCount, Count(*) OVER() AS UniversitiesNo
FROM Table
GROUP BY Subject

但这给了所有记录计数

我怎样才能为 Universities 指定唯一不同的?

【问题讨论】:

【参考方案1】:

您可以交叉连接一个返回所有不同大学数量的查询:

SELECT t.Subject, 
       COUNT(*) SubjectsCount,
       u.UniversitiesNo 
FROM tablename t 
CROSS JOIN (SELECT COUNT(DISTINCT University) UniversitiesNo FROM tablename) u
GROUP BY t.Subject, u.UniversitiesNo

甚至更简单:

SELECT Subject, 
       COUNT(*) SubjectsCount,
       (SELECT COUNT(DISTINCT University) FROM tablename) UniversitiesNo 
FROM tablename
GROUP BY Subject

请参阅demo。

【讨论】:

【参考方案2】:

使用COUNT DISTINCT:

SELECT Subject
   , Count(*) SubjectsCount
   , Count(DISTINCT University) AS UniversitiesNo
FROM Table
GROUP BY Subject

此查询给出每个Subject 的不同大学的数量。

要获得不同数量的大学,只需CROSS JOIN

SELECT t1.Subject,
       t1.SubjectsCount,
       t2.cnt
FROM (       
   SELECT Subject, Count(*) SubjectsCount         
   FROM Table1  
  GROUP BY Subject
) AS  t1
CROSS JOIN (SELECT COUNT(DISTINCT University) FROM Table1) AS t2(cnt)

Demo here

【讨论】:

我想计算所有大学的数量,而不仅仅是针对该学科,Count(*) 给出了大学的数量,因为每个学科在每个大学都是独一无二的

以上是关于如何查找组中另一组的计数的主要内容,如果未能解决你的问题,请参考以下文章

如何根据bigquery中另一列中的重复值计算一列

表中每个组的每月计数

试图让 numberOfRowsInSection 计数等于 Swift 中另一个文件的数组计数

从 Pandas 数据框中另一个系列分段的日期累积计数创建增量计数

检索与 $group 聚合中的指定条件匹配的计数

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?