SQL 计算一列包含两个不同值的唯一行

标签 sql database count

我环顾四周,没有找到任何符合我的问题。也许我在搜索时没有使用正确的语言或其他什么,但这里是。

我有一个名为 Classes 的 SQL 表,看起来像这样

Student_Name | Class  
--------------------  
Edgar        | Chemistry  
Allan        | Chemistry  
Burt         | Chemistry  
Edgar        | Math  
Sue          | Math  
Hamilton     | Math  
Edgar        | English  
Sue          | English  
Edgar        | German  
Ben          | German  

我想统计有多少学生同时参加数学和德语。

在此示例中假设如下: - 学生姓名是独一无二的 - 一个学生可以上很多课

从逻辑上讲,我会使用 select 语句来获取正在学习数学的学生的结果集。然后我会检查结果集中的每个 Student_Name,并根据表格检查它们,看看有多少人在学习德语。

在这种情况下,我希望返回 1,因为只有 Edgar 正在同时学习数学和德语。

以下是我迄今为止尝试过但无济于事的一些查询:-(

这是在对 DISTINCT 做了一些研究之后:

SELECT COUNT(DISTINCT Student_Name) FROM Classes WHERE Class = 'Math' AND Class = 'German';

这是在发现更多关于 GROUP BY 的信息之后:

SELECT COUNT(*) FROM (
    SELECT DISTINCT Student_Name FROM Classes 
    WHERE Class IN ( 'Math', 'German' ) 
    GROUP BY Student_Name
);

这些都不是很正确,我们将不胜感激。

最佳答案

SELECT  COUNT(*) totalStudent
FROM
        (
            SELECT  student_name
            FROM    Classes
            WHERE   class IN ('Math','German')
            GROUP   BY student_name
            HAVING  COUNT(*) = 2
        ) subAlias

输出

╔══════════════╗
║ TOTALSTUDENT ║
╠══════════════╣
║            1 ║
╚══════════════╝

关于SQL 计算一列包含两个不同值的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591968/

相关文章:

sql - T-SQL "Dynamic"加入

android - 查找不同用户的列总和的差异

database - MS Access 中的 2GB 数据库限制是否影响链接表?

mysql - 如何根据这些表中的纬度/经度(距离 10)将表 A 的多行与表 B 的多行进行匹配

MySQL 计数/求和字段

python Pandas : group by several columns and count value for one column

python - 如何优化这个 MySQL 计数算法?

sql - 如何在sql中使用一个公共(public)列以不同的条件两次使用同一列

MySql 对 over 子句使用正确的语法

sql-server - 将 SQL Server Express 2008 与 SQL Server 2005 数据库一起使用 - 如何检查兼容性