首頁  >  文章  >  資料庫  >  為什麼 MySQL 的 SUM 函數會回傳「0」而不是 NULL?

為什麼 MySQL 的 SUM 函數會回傳「0」而不是 NULL?

Patricia Arquette
Patricia Arquette原創
2024-10-30 18:43:02638瀏覽

Why Does MySQL's SUM Function Return '0' Instead of NULL?

使用MySQL 的SUM 函數檢索'0' 而不是NULL

當使用MySQL 中的SUM 函數計算a 中值的總和時列,如果未找到匹配值,則函數傳回NULL。如果您希望函數在這種情況下傳回 0,這種行為可能會出現問題。

要解決此問題,可以使用 COALESCE 函數。 COALESCE 接受兩個參數:第一個參數是您想要計算的表達式,第二個參數是您想要在第一個參數為 NULL 時傳回的值。

對於 SUM 函數,以下語法可以使用:

<code class="sql">SELECT COALESCE(SUM(Column_1), 0)
FROM Table
WHERE Column_2 = 'Test'</code>

在此範例中,將計算 SUM(Column_1) 表達式。如果未找到 Column_2 的符合值,則表達式將傳回 NULL。但是,COALESCE 函數將傳回指定的預設值 0,而不是 NULL。

此方法可確保 SUM 函數始終傳回數值,即使找不到符合值也是如此。因此,您可以避免處理 NULL 值時可能出現的潛在問題。

其他資訊:

為了更全面地了解 COALESCE 的工作原理,考慮以下場景:已建立三個表,每個表具有不同的資料類型。

  • 表1: 所有數值
  • 表2: 所有NULL 值
  • 數字和NULL 值的混合

對這些表運行以下查詢演示了COALESCE 的功能:

<code class="sql">SELECT  table_name,
        description,
        expected_sum,
        COALESCE(SUM(val), 0) AS actual_sum
FROM (
    SELECT  'foo'                   AS table_name,
            'mixed null/non-null'   AS description,
            21                      AS expected_sum,
            val
    FROM    Table1
    UNION ALL
    SELECT  'bar'                   AS table_name,
            'all non-null'          AS description,
            21                      AS expected_sum,
            val
    FROM    Table2
    UNION ALL
    SELECT  'baz'                   AS table_name,
            'all null'              AS description,
            0                       AS expected_sum,
            val
    FROM    Table3
) AS subquery
GROUP BY
    table_name,
    description,
    expected_sum
ORDER BY
    table_name,
    description;</code>

此查詢的結果表明,無論數據類型如何, COALESCE 都能確保SUM 函數傳回數值,從而在MySQL 應用程式中實現更靈活且可預測的資料處理。

以上是為什麼 MySQL 的 SUM 函數會回傳「0」而不是 NULL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn