Value、subject_id、およびstudent_idの列を持つ「MARKS」という表があるとします。 今私は、登場しているすべての科目で50以上の授業を確保しているすべての生徒の名前を表示するクエリを作成したいと考えています。 これはどのように達成できますか?SQL値より上のすべての値を持つデータを選択する方法
例: 被験者は数学、英語、歴史であると言います。 生徒が100点の英語で100点、歴史上40点のスコアであっても、失敗とみなして表示しないでください。
Value、subject_id、およびstudent_idの列を持つ「MARKS」という表があるとします。 今私は、登場しているすべての科目で50以上の授業を確保しているすべての生徒の名前を表示するクエリを作成したいと考えています。 これはどのように達成できますか?SQL値より上のすべての値を持つデータを選択する方法
例: 被験者は数学、英語、歴史であると言います。 生徒が100点の英語で100点、歴史上40点のスコアであっても、失敗とみなして表示しないでください。
見えたが、最も簡単な場合にはHAVING
句が役立つかもしれません。
SELECT student_id
FROM marks_table
GROUP BY student_id
HAVING min(marks) > 50;
が続いstudent_id
によって、学生の名前に参加:min
機能は、各student_id
のためにすべての科目の上に、最小限の値を取得しますので、次のクエリのグループ化では、student_id
によって行われます。
私の質問を明確にしないと申し訳ありません。編集されたバージョン –
@B Sumanthを参照してください。ちょうど 'sum'を' min'に変更するだけです。編集したバージョンを確認してください。 – diziaq
すでに回答がありますが、これもうまくいきます、ありがとう! –
戻り値は、対象者とのすべての学生は、あなたが期待するものを得るには、いくつかの方法があります
select student_id,subject_id, value from marks
where
(case when value < 50 then 'failed' else 'pass' end ) = 'pass'
しかし、生徒が別の科目で50点以下のスコアを出した場合でも表示されます。あなたが1つの科目でも失敗した場合、それは表示されるべきではありません –
生徒IDが<50未満の値を表示することはありません –
この回答は間違いです - 数学で100、英語で100、これは、(Historyが50未満であるために)その学生のための結果を数学と英語で表示してはならないときに表示します。 – MT0
私が言う:あなたは間違った結果を受け取りますSTUDENT_IDでヌルを持っている場合
select student_id
from table
where student_id not in (
select student_id
from table
where value < 50
)
は、注意してください。合体してこのラウンド下駄()サブ選択
select *
from
(
select student_id, MIN(Value) as sum_value
from MARKS
group by student_id
) summed
where
sum_value > 50
'SUM'を' MIN'に置き換えると、OPが求めていることが実行されます。外側のクエリを[HAVING'句](https://stackoverflow.com/a/44651134/1509264) – MT0
に置き換えることができます。OPが例を追加した後、彼はそれがより確実に達成したいと思っています。 私は、この単純な作業はすでに言及されているものを持っていることで結論づけることができると結論づけました。そして、より複雑な状況では、このもっと欲しい解決策になるかもしれません。だから私はちょうど別の機会としてそれを掲示... –
で[尋ねる]と[MCVE]質問 – Aleksej
を投稿する前に見てください、それは、学生が同じテーマで複数のスコアを持っていることは可能ですか?または、各(student_id、subject_id)のペアに最大で1つのマーク(値)がありますか? – mathguy