Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mencegah Fungsi MySQL SUM daripada Mengembalikan NULL?

Bagaimana untuk Mencegah Fungsi MySQL SUM daripada Mengembalikan NULL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 07:22:30228semak imbas

How to Prevent MySQL SUM Function from Returning NULL?

Cara Mengendalikan Nilai NULL dalam Fungsi MySQL SUM

Dalam MySQL, fungsi SUM sering mengembalikan NULL apabila tiada nilai ditemui, yang boleh menyusahkan. Artikel ini akan meneroka cara menggunakan fungsi COALESCE untuk memastikan SUM sentiasa mengembalikan '0' apabila tiada nilai ditemui.

Masalah:

Pertimbangkan pertanyaan seperti:

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

Jika tiada entri dalam Column_2 yang memenuhi kriteria, fungsi akan mengembalikan NULL. Walau bagaimanapun, kami mungkin lebih suka untuk mengembalikan '0'.

Penyelesaian: Menggunakan COALESCE

Untuk menangani isu ini, gunakan fungsi COALESCE. COALESCE mengambil berbilang nilai sebagai argumen dan mengembalikan nilai bukan NULL yang pertama. Dengan menggunakannya bersama-sama fungsi SUM, kita boleh memastikan bahawa hasilnya sentiasa '0' apabila NULL ditemui.

<code class="sql">SELECT COALESCE(SUM(column),0)
FROM   table
WHERE  ...</code>

Contoh:

Mari kita gunakan SQL biola untuk menunjukkan fungsi COALESCE: http://www.sqlfiddle.com/#!2/d1542/3/0

Maklumat Tambahan:

COALESCE fungsi juga boleh digunakan dengan fungsi lain untuk mengendalikan nilai NULL. Berikut ialah contoh menggunakan tiga jadual dengan nilai yang berbeza:

Penyediaan Skema MySQL 5.5.32:

<code class="sql">CREATE TABLE foo (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO foo (val) VALUES
(null), (1), (null), (2), (null), (3), (null), (4), (null), (5), (null), (6), (null);

CREATE TABLE bar (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO bar (val) VALUES
(1), (2), (3), (4), (5), (6);

CREATE TABLE baz (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO baz (val) VALUES
(null), (null), (null), (null), (null), (null);</code>

Pertanyaan:

<code class="sql">SELECT  'foo'                   as table_name,
        'mixed null/non-null'   as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    foo
UNION ALL

SELECT  'bar'                   as table_name,
        'all non-null'          as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    bar
UNION ALL

SELECT  'baz'                   as table_name,
        'all null'              as description,
        0                       as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    baz</code>

Keputusan:

TABLE_NAME DESCRIPTION EXPECTED_SUM ACTUAL_SUM
foo mixed null/non-null 21 21
bar all non-null 21 21
baz all null 0 0

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Fungsi MySQL SUM daripada Mengembalikan NULL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn