H29PM1問2設問1について

あきさん  
(No.1)
SQLの穴埋め問題でaについてご質問です。
こちら回答ではSUM(S.出庫数量)とあるのですが
COALESCE(SUM(S.出庫数量),0)としたら不正解でしょうか?

問題文ではSQL1は各部品の出庫年月日ごとの出庫数量を集計する。またSQL1では出庫が全くない部品も集計対象とするという記載があり、どうするかという記載はありませんでした(見落としていなければですが……)
NULLが正解なのは分かるのですが0となるように回答したら不正解なのかお伺いしたいです。
2024.06.24 22:48
GinSanaさん 
DB シルバーマイスター
(No.2)
SUMの外側よりSUMの引数にコアレスを張っておくべきではないですか。
SQL標準の原理では集合関数のNULLの扱いが直感的ではないので、入れたくなってしまうのかもしれません。入れても悪さはしないが、入れずとも(SQL標準としては)平気なことになっているから、あえて模範解答では書かなかったのかもしれません。

SQL99

Chapter 33 -- Searching with Groups
github.com/crate/sql-99/blob/main/docs/chapters/33.rst

Set Functions and the "Ignore NULLs" Policy

Because of the "ignore NULLs" policy, it should be rare for a set function to return NULL. The only cases are: for MIN or MAX or SUM or AVG, if every one of the Column values is NULL, or if the SELECT returns no rows at all, the function returns NULL (・・・). 
「NULL を無視する」ポリシーのため、セット関数が NULL を返すことはまれです。唯一のケースは、MIN、MAX、SUM、AVG の場合、列の値がすべて NULL の場合、または SELECT が行をまったく返さない場合、関数は NULL を返します (・・・)。
2024.06.25 08:29
あきさん  
(No.3)
なるほど、確かに書くなら内側ですね……。
記載することで間違いとはならなさそうで、よかったです。
ご回答ありがとうございます。
2024.06.25 21:15

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop