※ ChatGPTを利用し、要約された質問です(原文:オラクルSQLの問題でDECODE関数について)
オラクルSQLの問題でDECODE関数について
このQ&Aのポイント
『DEPATMENT_ID列が80の場合でかつCOMMISSION_PCT列がNULL値の場合は「NO COMMISSION」、NULL値でない場合は「SALARY*COMMISSION_PCT」が文字列に変換されて戻されます。また、DEPARTMENT_ID列が80以外の場合は「NOT SALES」が戻されます。』と解説があり、
『DECODE関数が最初に戻す「SALARY*COMMISSION_PCT」が数値型なので、「NO COMMISSION」が数値に変換できないためエラーになります。』と解説がありました。
DECODE関数の公式には、αがβのときはγを戻し、それ以外のときはδを戻すというルールがありますが、γとδは同じ型でなければいけないというルールがあるため、後段のコードではエラーが発生します。
オラクルSQLの問題でDECODE関数について教えて下さい。
SELECT employee_id,
DECODE(department_id,80,
DECODE(commission_pct,NULL,'NO COMMISSION',
salary * commission_pct),
'NOT SALES'} "COMMISSION"
FROM employees;
上記のは
『DEPATMENT_ID列が80の場合でかつCOMMISSION_PCT列がNULL値の場合は「NO COMMISSION」、NULL値でない場合は「SALARY*COMMISSION_PCT」が文字列に変換されて戻されます。また、DEPARTMENT_ID列が80以外の場合は「NOT SALES」が戻されます。』と解説があり、
次に
SELECT employee_id,
DECODE( NULL IF(commission_pct,NULL),
0,salary * commission_pct,
'NO COMMISSION') "COMMISSION"
FROM employees;
このコードについては
『DECODE関数が最初に戻す「SALARY*COMMISSION_PCT」が数値型なので、「NO COMMISSION」が数値に変換できないためエラーになります。』
と解説がありました。
正常に実行できるのは前段のもので後段はできないとのことなのですがどうしてかわかりません。
なぜ後段では数値型に変換する必要があるのか、前段では同じsalary*commission_pctが文字列として扱っているのかわかりません。
DECODE関数の
DECODE(α、
β、γ
δ)
αがβのときはγを戻し、それ以外のときはδを戻すという公式があると思いますが、
もしかしてγとδは同じ型でなければいけないというルールがあるのでしょうか。でもたとえそうだとしてもまだ解せない部分があるのですが・・・。ご教授どうかよろしくお願いいたします。これはオラクルブロンズSQLの参考書の模擬試験にあった問題になります。
お礼
回答頂く事で冷静に理解することができました。 ありがとうございました。