0

生徒と成績の表が与えられた場合、100 を超えずに各生徒の成績を 10% ずつ増やす方法はありますか?

今、私はそうしています

UPDATE studentCourse
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1

言い換えると、生徒が 60 点の場合、更新後は 66 点になるはずです。しかし、生徒の点数が 98 の場合、更新後は成績が 100 になるはずです (108 ではありません)。

これはすべて標準 SQL で行う必要があります

4

3 に答える 3

1

このコードをテストするインスタンスはありませんが、データが現実的 (すべて 0 ~ 100) であると仮定すると、スコアが 90 未満の場合は CASE ステートメントを使用して、既にあるように 10% を追加できます。それ以外の場合、スコアは 100 になると言えます。

例えば:

UPDATE [studentCourse]
SET grade=
(
CASE
  WHEN
  (grade <= 90)
    THEN grade + 10 * (grade/100)
  ELSE
    (100)
  END
)
WHERE
csid = 1
于 2012-11-06T23:03:19.080 に答える
0

MySQL には次のような機能LEAST()があります。

UPDATE studentCourse
SET grade = LEAST(100, grade + 10 * (grade/100))
WHERE csid = 1;

このLEAST()関数は MySQL 固有です。ANSI SQL に厳密に準拠したい場合CASEは、@chrisc の提案に従って使用してください。

于 2012-11-06T23:07:48.860 に答える
0

2つのステートメントを実行できますか

UPDATE studentCourse
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1;

に続く

UPDATE studentCourse
SET grade = 100
where csid = 1
  and grade > 100;

COMMIT;
于 2012-11-06T23:04:30.683 に答える