连接 2 个表并计算 SQL 中特定字段的出现次数

Posted

技术标签:

【中文标题】连接 2 个表并计算 SQL 中特定字段的出现次数【英文标题】:Join 2 tables and Count the number of occurrence specific field in SQL 【发布时间】:2015-01-30 07:16:59 【问题描述】:

我有 2 个表,“T_COMMON_COUNTRY”和“T_HEI_STUDENTDATA”。使用左连接我加入了这些表

这是我的查询

SELECT 
    [T_COMMON_COUNTRY].[COUNTRY_ID], 
    [T_COMMON_COUNTRY].[COUNTRY], 
    [T_HEI_STUDENTDATA].[STUDENT_ID]

FROM ([T_COMMON_COUNTRY]

 LEFT JOIN [T_HEI_STUDENTDATA]

 ON [T_COMMON_COUNTRY].[COUNTRY] = [T_HEI_STUDENTDATA].[STDCOUNTRY])

现在我得到了这样的视图

 |   Country ID   |     County      | Student ID |
 |       1        |      USA        |     12     |
 |       1        |      USA        |     5      |
 |       2        |      UK         |     11     |
 |       2        |      UK         |     2      |

我想统计与某个国家/地区相关的学生 (Student_ID) 的数量,

我想得到一个和下面完全一样的视图

 |   Country ID   |     County      | Students |
 |       1        |      USA        |     2    |
 |       2        |      UK         |     2    |

【问题讨论】:

【参考方案1】:

使用COUNT 函数生成国家学生人数

试试这个:

SELECT C.[COUNTRY_ID], C.[COUNTRY], COUNT(S.[STUDENT_ID]) AS StudentCount
FROM [T_COMMON_COUNTRY] C
LEFT JOIN [T_HEI_STUDENTDATA] S ON C.[COUNTRY] = S.[STDCOUNTRY]
GROUP BY C.[COUNTRY_ID], C.[COUNTRY];

【讨论】:

【参考方案2】:

使用COUNT函数统计GROUP BY Country_ID和Country的学生人数。

 SELECT 
        [T_COMMON_COUNTRY].[COUNTRY_ID], 
        [T_COMMON_COUNTRY].[COUNTRY], 
        COUNT([T_HEI_STUDENTDATA].[STUDENT_ID]) AS Students

    FROM ([T_COMMON_COUNTRY]

     LEFT JOIN [T_HEI_STUDENTDATA]

     ON [T_COMMON_COUNTRY].[COUNTRY] = [T_HEI_STUDENTDATA].[STDCOUNTRY])
    GROUP BY [T_COMMON_COUNTRY].[COUNTRY_ID], [T_COMMON_COUNTRY].[COUNTRY]

【讨论】:

以上是关于连接 2 个表并计算 SQL 中特定字段的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

SQL计算第二个表中一个表中单词的出现次数

使用 Redshift 计算特定 ID 字段中值的出现次数

在 Redshift 中使用连接的最佳方式

SQL遍历表并删除如果不是特定名称

当您连接 2 个具有相同架构的表并检查除一个以外的所有字段是不是相等时,如何避免在 SQL 中编写冗长的 where 子句?

Laravel 8 如何连接 2 个表并检查值是不是存在