学生和分数之间有一个简单的关系:
学生:
+------------+-------------+
| idStudent | NameStudent |
+------------+-------------+
| 1 | Student A |
| 2 | Student B |
| 3 | Student C |
+------------+-------------+
标志:
+----------+------+-----------+
| idMarks | mark | idStudent |
+----------+------+-----------+
| 1 | A | 1 |
| 2 | A | 1 |
| 3 | A | 1 |
| 4 | A | 2 |
| 5 | A | 2 |
| 6 | C | 3 |
| 7 | A | 3 |
+----------+------+-----------+
我只想让每个通过考试的学生都得“a”
SELECT *, COUNT(mark)
FROM student S
INNER JOIN marks M ON S.idStudent = M.idStudent
WHERE M.mark = "A"
GROUP BY S.idStudent
我试过这个,但当我试图比较他们通过考试的人数和他们有一个。。。
我也尝试过子查询,但没有成功
3条答案
按热度按时间okxuctiv1#
按学生分组
找到学生获得的所有不同的标记,并使用groupconcat函数将它们放在逗号分隔的字符串中
只需过滤掉(使用having子句)只有一个完全不同的标记的标记,即
使用以下查询:
fykwrbwg2#
如果你只需要学生证,你可以
LEFT JOIN
学生在连接子句中加入一个条件,要求标记不是a。然后WHERE
子句只包括行不匹配的学生:7dl7o3gd3#
你可以用
HAVING
: