5
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 查询来检查同一个学生 ID 是否所有科目的分数都为 A。

试图使用HAVING MAX(Grade) = 'A'但没有帮助。有什么建议吗?

4

4 回答 4

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
于 2012-04-12T07:09:25.163 回答
2

这将返回A所有科目的所有学生:

select distinct id from t t1
where not exists (
  select * from t t2
  where t1.id = t2.id and grade != 'A')

如果要检查特定学生,只需添加一个where子句。顺便说一句……一个学生对于一个给定的科目可以有多个结果吗?(两次相同的科目但不同的年级)

你可以在这里检查小提琴。

于 2012-04-12T07:14:41.717 回答
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的目标。

如果您只想要获得所有 A 的 ID

...只需添加一个 where 子句(或更改现有的子句):

SELECT * FROM TABLE t1
WHERE NOT EXISTS (
  SELECT 1 
  from table t2 
  where t2.id = t1.id 
  and t2.grade <> 'A')
于 2012-04-12T07:12:28.573 回答
0

您是否尝试过这样的事情(按升序排序,在您的情况下只给出第一个值 A)

SELECT * FROM `yourtable` WHERE `ID` = '12112' AND `Subject` = 'MM' ORDER BY `Grade` ASC LIMIT 0, 1
于 2012-04-12T07:09:40.027 回答