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!