2017-08-08 3 views
-1

私は学生マークを計算するシステムを持っています。現在、最高6つの科目が計算されていますが、英語の場合は最高6点、英語の場合は最高5点です。英語のマークは計算に含めることが必須です。MySQLのSUM()関数のフィルタ固有の行

ここに私のコードです。

UPDATE `students` SET `term_1_avg` =(
    SELECT ROUND (SUM(sub_avg_term1/6)) AS term_1_avg 
    FROM (
     SELECT (sub_avg_term1) 
     FROM marks 
     WHERE marks.student_id = '$student_search_id' 
     ORDER BY sub_avg_term1 DESC LIMIT 6 
    ) AS sub 
) 
WHERE students.student_id='$student_search_id' 

どうすればいいですか?

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

答えて

0

あなたはトップ5と英語のUNIONをする必要があります。 marksを想定し

 UPDATE `students` SET `term_1_avg` =(
     SELECT ROUND (SUM(sub_avg_term1/6)) AS term_1_avg 
     FROM (
      (SELECT (sub_avg_term1) 
      FROM marks 
      WHERE marks.student_id = '$student_search_id' 
      AND marks.subject != 'English' 
      ORDER BY sub_avg_term1 DESC LIMIT 5) 
      UNION 
      (SELECT (sub_avg_term1) 
      FROM marks 
      WHERE marks.student_id = '$student_search_id' 
      AND marks.subject = 'English') 
     ) AS sub 
    ) 
    WHERE students.student_id='$student_search_id' 

のようなものは、あなたが課題の一つとして'English'見つけるだろうsubjectフィールドを持っています。しかし、実際の構造が何であれ、それに応じて修正することができます。

+0

ありがとう、しかし、それは私に#1221を与えます - UNIONとORDER BYエラーの不正な使用 – neliza

+0

5つのグループから英語をよく除外しますか? (あなたは潜在的に2度それを得ることはありませんので) –