如何查找组中另一组的计数
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(*) 给出了大学的数量,因为每个学科在每个大学都是独一无二的以上是关于如何查找组中另一组的计数的主要内容,如果未能解决你的问题,请参考以下文章
试图让 numberOfRowsInSection 计数等于 Swift 中另一个文件的数组计数