応用情報技術者令和6年春期 午前問26

問26

"部品"表及び"在庫"表に対し,SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。
26.png/image-size:560×147
〔SQL文〕
SELECT 部品.部品ID AS 部品ID,
 CASE WHEN 部品.発注点 > a
  THEN N'必要' ELSE N'不要' END AS 発注要否
FROM 部品 LEFT OUTER JOIN 在庫
 ON 部品.部品ID = 在庫.部品ID
GROUP BY 部品.部品ID,部品.発注点
  • COALESCE(MIN(在庫.在庫数),0)
  • COALESCE(MIN(在庫.在庫数),NULL)
  • COALESCE(SUM(在庫.在庫数),0)
  • COALESCE(SUM(在庫.在庫数),NULL)

分類

テクノロジ系 » データベース » データ操作

正解

解説

COALESCE句は、引数を左から順に調べて、最初のNULLではない値を返す関数です。すなわち、第1引数がNULLでなければ第1引数の値を返し、第1引数がNULLであれば第2引数の値を返します。2つを超える引数を指定することも可能です。

まず、FROM句とGROUP BY句によって得られる中間表を考えます。FROM句では、部品表と在庫表を"部品ID"列で左外部結合しているので、結合後の中間表は以下のようになります。
26_1.png/image-size:267×161
GROUP BY句では、この中間表を"部品ID"列、"発注点"列ごとにグループ化するので結果は以下のようになります。
26_2.png/image-size:267×161
このグループ化された中間表に対してCOALESCE句を適用したときに、〔結果〕のようにP01とP02は'不要'に、P03は'必要'になるものはどれかを考えています。
  • MIN関数はグループの列値の中で最小値を返します。P03のNULLはCOALESCE句により0に変換されます。
    • MIN関数が返す値 P01=90、P02=150、P03=NULL
    • COALESCE句が返す値 P01=90、P02=150、P03=0
    発注要否は、値が発注点より少ないP01とP03は'必要'、発注点以上のP02は'不要'となります。P01が'必要'となるので誤りです。
  • 「ア」と同様の流れで、MIN関数の結果は、COALESCE句によりP01=90、P02=150、P03=NULLに変換されます。「ア」と同じく発注要否は、P01は'必要'、P02は'不要'となります。P03はNULL値との比較であり常にUNKNOWNを返すため、P03も'不要'となります。P01が'必要'、P03が'不要'となるので誤りです。
  • 正しい。SUM関数はグループの列値の合計を返します。P03のNULLはCOALESCE句により0に変換されます。
    • SUM関数が返す値 P01=180、P02=150、P03=NULL
    • COALESCE句が返す値 P01=180、P02=150、P03=0
    〔結果〕と同じく、値が発注点以上のP01とP02は'不要'、発注点より少ないP03は'必要'を返します。
  • 「ウ」と同様の流れで、SUM関数の結果は、COALESCE句によりP01=180、P02=150、P03=NULLに変換されます。「ウ」と同じく、P01とP02の発注要否は'不要'となり、NULL値との比較であるP03も'不要'となります。P03が'不要'となるので誤りです。
※解答とは直接関係ありませんが、シングルクォーテーションの前にある N はUnicode文字であることを明示する記述です。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop