2017-06-20 10 views
-1

Value、subject_id、およびstudent_idの列を持つ「MARKS」という表があるとします。 今私は、登場しているすべての科目で50以上の授業を確保しているすべての生徒の名前を表示するクエリを作成したいと考えています。 これはどのように達成できますか?SQL値より上のすべての値を持つデータを選択する方法

例: 被験者は数学、英語、歴史であると言います。 生徒が100点の英語で100点、歴史上40点のスコアであっても、失敗とみなして表示しないでください。

+0

で[尋ねる]と[MCVE]質問 – Aleksej

+0

を投稿する前に見てください、それは、学生が同じテーマで複数のスコアを持っていることは可能ですか?または、各(student_id、subject_id)のペアに最大で1つのマーク(値)がありますか? – mathguy

答えて

3

見えたが、最も簡単な場合にはHAVING句が役立つかもしれません。

SELECT student_id 
    FROM marks_table 
GROUP BY student_id 
HAVING min(marks) > 50; 

が続いstudent_idによって、学生の名前に参加:min機能は、各student_idのためにすべての科目の上に、最小限の値を取得しますので、次のクエリのグループ化では、student_idによって行われます。

+0

私の質問を明確にしないと申し訳ありません。編集されたバージョン –

+0

@B Sumanthを参照してください。ちょうど 'sum'を' min'に変更するだけです。編集したバージョンを確認してください。 – diziaq

+0

すでに回答がありますが、これもうまくいきます、ありがとう! –

0

戻り値は、対象者とのすべての学生は、あなたが期待するものを得るには、いくつかの方法があります

select student_id,subject_id, value from marks 
where 
(case when value < 50 then 'failed' else 'pass' end ) = 'pass' 
+0

しかし、生徒が別の科目で50点以下のスコアを出した場合でも表示されます。あなたが1つの科目でも失敗した場合、それは表示されるべきではありません –

+0

生徒IDが<50未満の値を表示することはありません –

+0

この回答は間違いです - 数学で100、英語で100、これは、(Historyが50未満であるために)その学生のための結果を数学と英語で表示してはならないときに表示します。 – MT0

1

私が言う:あなたは間違った結果を受け取りますSTUDENT_IDでヌルを持っている場合

select student_id 
from table 
where student_id not in (
     select student_id 
     from table 
     where value < 50 
    ) 

は、注意してください。合体してこのラウンド下駄()サブ選択

+0

パーフェクト!ありがとう –

+0

@BSumanthこの回答は2つのテーブル/インデックススキャン(外部クエリ用とサブクエリ用)を必要とし、各学生のサブジェクトの重複した行を表示します - [GROUP BYとHAVINGを使用](https ://stackoverflow.com/a/44651134/1509264)は、単一のテーブルスキャンのみを必要とし、一意の値のみを表示します。 – MT0

+0

これは、それぞれの 'student_id'を何度も返しますが、それは正しいでしょうか?ベーステーブルに表示される回数。 – mathguy

0
select * 
from 
    (
     select student_id, MIN(Value) as sum_value 
     from MARKS 
     group by student_id 
    ) summed 
where 
    sum_value > 50 
+0

'SUM'を' MIN'に置き換えると、OPが求めていることが実行されます。外側のクエリを[HAVING'句](https://stackoverflow.com/a/44651134/1509264) – MT0

+0

に置き換えることができます。OPが例を追加した後、彼はそれがより確実に達成したいと思っています。 私は、この単純な作業はすでに言及されているものを持っていることで結論づけることができると結論づけました。そして、より複雑な状況では、このもっと欲しい解決策になるかもしれません。だから私はちょうど別の機会としてそれを掲示... –