Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 高度なNULL処理 | 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を無視し、存在するデータのみを対象とする。この動作により、欠損データが合計や平均値を歪めることはないが、実際に存在する値の数を把握しておく必要がある。

NULLを含む比較も独特であり、=<><>などの比較はすべて不明(unknown)を返し、真や偽にはならない。

ゼロや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`ドロップして空欄を埋めてください

すべて明確でしたか?

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

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

セクション 5.  4

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 5.  4
some-alt