ID | Subject | Grade
12113 BM A
12113 BI A
12113 MM A
12113 SJ A
12113 GE B
12113 SV A
12113 PJ A
12112 BM A
12112 BI A
12112 MM A
12112 SJ A
12112 GE A
12112 SV A
12112 PJ A
以上所有,上面是显示带有多个主题的学生ID的样本表。我无法弄清楚如何使用mysql查询检查相同的studentID是否具有所有科目的分数A.
试图使用HAVING MAX(Grade) = 'A'
,但没有帮助。有什么建议吗?
答案 0 :(得分:2)
select ID,
case when count(ID) = sum(case when Grade = 'A' then 1 else 0 end) then 'YES' else 'NO' end as IsAllAGrade
from yourTable
group by ID
答案 1 :(得分:2)
这将返回所有科目中A
的所有学生:
select distinct id from t t1
where not exists (
select * from t t2
where t1.id = t2.id and grade != 'A')
如果您想检查特定学生,只需添加where
条款即可。顺便说一下......学生可以为一个特定科目获得多个结果吗? (两个相同的主题,但有不同的等级)
您可以查看小提琴here。
答案 2 :(得分:1)
SELECT * FROM TABLE t1
WHERE NOT EXISTS (
SELECT 1
from table t2
where t2.id = t1.id
and t2.grade <> t1.grade)
没有假设('假设所有ID都有7个课程'),总是有效,是NOT EXISTS
的作用。
...只需添加一个where子句(或更改现有子句):
SELECT * FROM TABLE t1
WHERE NOT EXISTS (
SELECT 1
from table t2
where t2.id = t1.id
and t2.grade <> 'A')
答案 3 :(得分:0)
你有没有试过这样的事情(按升序排序,只在你的情况下给出第一个值)
SELECT * FROM `yourtable` WHERE `ID` = '12112' AND `Subject` = 'MM' ORDER BY `Grade` ASC LIMIT 0, 1