Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 高度なNULL処理 | セクション
SQLにおける関数

book高度なNULL処理

メニューを表示するにはスワイプしてください

SQLを使用する際、NULL値の正しい取り扱いは特に複雑なクエリで重要。NULLは欠損または不明なデータを表し、集計や比較の結果に大きな影響を与える可能性がある。例えば、COUNTSUMAVGなどの操作を行う場合、これらの関数が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;
copy

上記の例では、COUNT(bonus)bonusNULLでない行のみをカウントし、COUNT(*)NULLを含むすべての行をカウントする。両方のSUMAVGNULL値を無視し、利用可能なデータのみで集計を行う。この動作により、欠損データが合計や平均値を歪めることはなく、実際に存在する値の数を把握しておく必要がある。

比較に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;
copy

COALESCENULLIF を組み合わせることで、除算結果が NULL となる場合(たとえば部門にボーナスがない場合)でも、0 などのデフォルト値を返すことができます。この方法により、クエリの堅牢性が向上し、レポートや計算で予期しない NULL 結果を防ぐことができます。

1. COUNT(*) は NULL 値をどのように扱いますか?

2. 両方の引数が等しい場合、NULLIF の結果は何ですか?

3. NULLIF を除算演算で使用するために空欄を埋めてください。ボーナスの合計をボーナスのカウントで安全に割り、ゼロ除算を回避するクエリを完成させてください。

question mark

COUNT(*) は NULL 値をどのように扱いますか?

正しい答えを選んでください

question mark

両方の引数が等しい場合、NULLIF の結果は何ですか?

正しい答えを選んでください

question-icon

NULLIF を除算演算で使用するために空欄を埋めてください。ボーナスの合計をボーナスのカウントで安全に割り、ゼロ除算を回避するクエリを完成させてください。

SELECT SUM(bonus) / NULLIF(, ) FROM employees;
NULL

クリックまたはドラッグ`n`ドロップして空欄を埋めてください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  28

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  28
some-alt