我环顾四周,没有找到任何符合我的问题。也许我在搜索时没有使用正确的语言或其他什么,但这里是。
我有一个名为 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/