高度なNULL処理
メニューを表示するにはスワイプしてください
SQLを使用する際、NULL値の正しい取り扱いは特に複雑なクエリで重要。NULLは欠損または不明なデータを表し、集計や比較の結果に大きな影響を与える可能性がある。例えば、COUNT、SUM、AVGなどの操作を行う場合、これらの関数がNULL値をどのように扱うかによって、考慮しないと予想外の結果になることがある。
1234567-- Demonstrate how COUNT, SUM, and AVG handle NULL values in the 'bonus' column SELECT COUNT(bonus) AS count_bonus, -- Counts only non-NULL values COUNT(*) AS count_all, -- Counts all rows, including those with NULL SUM(bonus) AS sum_bonus, -- Ignores NULLs when summing AVG(bonus) AS avg_bonus -- Ignores NULLs when averaging FROM employees;
上記の例では、COUNT(bonus)はbonusがNULLでない行のみをカウントし、COUNT(*)はNULLを含むすべての行をカウントする。両方のSUMとAVGはNULL値を無視し、利用可能なデータのみで集計を行う。この動作により、欠損データが合計や平均値を歪めることはなく、実際に存在する値の数を把握しておく必要がある。
比較にNULLが含まれる場合、任意のNULLとの比較(=、<>、<、>)はunknownを返し、true または false にはならない。このため、クエリのフィルタリングや条件ロジックに影響する。
ゼロやNULLとなる可能性がある値で割り算を行う場合、エラーや予期しない結果を避けるためにNULLIF関数を使用できる。NULLIFは2つの式を比較し、等しい場合はNULLを返し、そうでなければ最初の式を返す。これにより、ゼロ除算を回避し、NULLで割った場合にはランタイムエラーを発生させず、NULLを結果として返すことができる。
12345678910111213-- Safely calculate the average bonus per department, avoiding division by zero SELECT department, SUM(bonus) / NULLIF(COUNT(bonus), 0) AS avg_bonus FROM employees GROUP BY department; -- Combine COALESCE and NULLIF to provide a default value when division yields NULL SELECT department, COALESCE(SUM(bonus) / NULLIF(COUNT(bonus), 0), 0) AS avg_bonus FROM employees GROUP BY department;
COALESCE と NULLIF を組み合わせることで、除算結果が NULL となる場合(たとえば部門にボーナスがない場合)でも、0 などのデフォルト値を返すことができます。この方法により、クエリの堅牢性が向上し、レポートや計算で予期しない NULL 結果を防ぐことができます。
1. COUNT(*) は NULL 値をどのように扱いますか?
2. 両方の引数が等しい場合、NULLIF の結果は何ですか?
3. NULLIF を除算演算で使用するために空欄を埋めてください。ボーナスの合計をボーナスのカウントで安全に割り、ゼロ除算を回避するクエリを完成させてください。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください