【问题标题】: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 指定唯一不同的?

【问题讨论】:

    标签: sql-server select group-by count


    【解决方案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(*) 给出了大学的数量,因为每个学科在每个大学都是独一无二的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多