如何检查相同的ID是否获得不同科目的相同成绩?

时间:2012-04-12 07:01:42

标签: php mysql

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',但没有帮助。有什么建议吗?

4 个答案:

答案 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的作用。

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

...只需添加一个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