我已经好好看了一下,但却找不到与我相符的任何问题。也许我在搜索时没有使用正确的语言或者其他什么,但是这里有。
我有一个名为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,因为只有埃德加同时学习数学和德语。
以下是我迄今为止尝试的一些查询无效: - (
这是在对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
);
这些都没有出现,任何帮助都会受到高度赞赏。
答案 0 :(得分:5)
SELECT COUNT(*) totalStudent
FROM
(
SELECT student_name
FROM Classes
WHERE class IN ('Math','German')
GROUP BY student_name
HAVING COUNT(*) = 2
) subAlias
输出
╔══════════════╗
║ TOTALSTUDENT ║
╠══════════════╣
║ 1 ║
╚══════════════╝
答案 1 :(得分:4)
还可以执行以下操作:
select count(distinct a.Student_name)
from Classes a inner join Classes b on
a.Class = 'German' and
b.Class = 'Math' and
a.Student_Name = b.Student_name;
这解决了表中包含重复行的问题(如评论者指出的另一个答案)