SQL列
SQLデータベースの基本的な知識の要約
SQLデータベースの高度な知識の要約
問題
データ統計を行うとき、パーセンテージ、チェーン比率、前年比などを求めるなど、特定の数値で除算する必要がある状況に遭遇することがよくあります。除数が0の場合、データベースはエラーを報告します。 。
では、このような状況にどのように対処するのでしょうか。例を使って対処方法を説明しましょう。
解決
状況1
例えば
SELECT A/B FROM TAB
このような状況では、一般的なアプローチは、CASEWHENを使用してBの値を決定することです。
SELECT
CASE WHEN B=0 THEN 0 ELSE A/B END
FROM TAB
このように、Bが0の場合、A / Bが計算に参加してエラーを報告しないように、値を直接割り当てます。
状況2
上記は一般的な状況ですが、次の集計関数が発生した場合はどうなりますか?
例えば
SELECT SUM(A)/COUNT(B) FROM TAB
このような状況では、CASE WHENはCOUNT(B)の値を判断できません。これは、WHENの背後にある条件が集計関数(構文要件)を使用できないためです。現時点では、次のように処理できます。
SELECT
ISNULL(SUM(A)/NULLIF(COUNT(B),0),0)
FROM TAB
ここでは、NULLIF()とISNULL()の2つの関数が使用されています。
NULLIF関数には、次のように定義されている2つのパラメーターがあります。
NULLIF(式1、式2)
その機能は次のとおりです。指定された2つの式が等しい場合、NULL値を返します。
ISNULL関数には、次のように定義されている2つのパラメーターもあります。
ISNULL(式1、式2)
その機能は次のとおりです。最初のパラメーターの結果がNULLの場合、2番目のパラメーターの値が返されます。
COUNT(B)の結果が0の場合、2番目に指定されたパラメーター0と正確に等しくなります。このとき、NULLIF関数はNULLを返し、NULLで除算したときのSUM(A)の結果はNULLであり、外層はISNULLを使用します。関数はNULL値を判断するため、最終結果は0になります。
これらの2つの方法は、除数が0の状況を日常的に処理するため、覚えておく必要があります〜