平成30年 秋 午後 問3 設問4

s.a.さん  
(No.1)
CASE
  WHEN 決済額 >= 20000 THEN FLOOR(決済額 * 0.03)
  WHEN 決済額 >= 10000 THEN FLOOR(決済額 * 0.02)
  ELSE FLOOR(決済額 * 0.01)
END

が正解とのこと。

複数のWHENを書けるのは納得なのですが、
条件2(決済額 >= 10000)の範囲に条件1(決済額 >= 20000)が入ってしまっている点が腑に落ちていません。
上書きされてしまうような感覚を覚え、選択肢から消去しそうです。

条件2には「条件1でなく、かつ」の意図が含まれてるんですかね?
IF文を用いてELSEIFを使いたくなります…
2022.10.09 14:06
jjon-comさん 
FE・シルバーエキスパート
(No.2)
https://www.fe-siken.com/kakomon/30_aki/pm03.html

SQLのCASE句は、WHEN条件式を最初の行から順に判定していき、判定結果が真となる条件式を見つけたらTHENで指定された値を出力値とし、それ以降の条件式の判定はおこないません。

> 腑に落ちていません。
> IF文を用いてELSEIFを使いたくなります…

SQLにおいては、
条件式1 が真ならば 処理1 を実行する
ではなく、
条件式1 が真ならば 値1 を返す
です。

条件式1、条件式2、条件式3 のすべて成り立ったからといって、
値1、値2、値3 のすべてを(表計算における1つのセルに)埋め込む訳にはいかない。
返す値はどれか1つだけでなければならない。

そのイメージが脳裏にあれば、
CASE WHEN … THEN … END の動作もイメージできそうに思うのですけれど。
2022.10.10 00:58
s.a.さん  
(No.3)
> 条件式1 が真ならば 処理1 を実行する
> ではなく、
> 条件式1 が真ならば 値1 を返す

なるほどーこれは説得力があります。
納得しました!

値1が返ったら以降のWHENを見ないということで、理解しました。

「条件式2 が真ならば 処理2 を実行」して、処理1 の結果を上書きしちゃうような感覚を持っていましたが、認識を改めました!
2022.10.10 13:19

返信投稿用フォーム

スパム防止のためにスレッド作成から30日以上経過したスレッドへの書き込みは禁止しています。

その他のスレッド


Pagetop