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 を示すサンプル テーブルです。同じ学生IDがすべての科目でスコアAを持っているかどうかを確認するためにmysqlクエリを使用する方法を理解できませんでした。

使用しようとしまし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句を追加するだけです。ところで... 学生は、特定の教科について複数の結果を持つことができますか? (同じ科目で学年が違う2回)

ここでフィドルを確認できます。

于 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 に答える