ปัญหาของ SUM() ที่คืนค่า NULL
เมื่อฟังก์ชัน SUM() ได้รับคอลัมน์ที่ไม่มีค่า (empty/no values) เป็นอาร์กิวเมนต์ จะคืนค่า NULL แทนที่จะเป็น 0 แต่เราสามารถปรับแต่งให้แสดงเป็น 0 ได้โดยใช้ฟังก์ชัน COALESCE()
หลักการทำงานของ COALESCE()
COALESCE() รับอาร์กิวเมนต์ 2 ค่า และจะคืนค่าอาร์กิวเมนต์ที่ 2 หากอาร์กิวเมนต์แรกเป็น NULL มิฉะนั้นจะคืนค่าอาร์กิวเมนต์แรก
ตัวอย่าง
ข้อมูลในตาราง Tender:
mysql> Select * from tender; +----+---------------+--------------+ | Sr | CompanyName | Tender_value | +----+---------------+--------------+ | 1 | Abc Corp. | 250.369003 | | 2 | Khaitan Corp. | 265.588989 | | 3 | Singla group. | 220.255997 | | 4 | Hero group. | 221.253006 | | 5 | Honda group | NULL | +----+---------------+--------------+ 5 rows in set (0.00 sec)
โดยไม่ใช้ COALESCE() - คืนค่า NULL:
mysql> Select SUM(Tender_value) From Tender Where CompanyName = 'Honda Group'; +-------------------+ | SUM(Tender_value) | +-------------------+ | NULL | +-------------------+ 1 row in set (0.00 sec)
ใช้ COALESCE() ร่วมกับ SUM() - คืนค่า 0:
mysql> Select COALESCE(SUM(Tender_value),0) From Tender Where CompanyName = 'Honda Group'; +-------------------------------+ | COALESCE(SUM(Tender_value),0) | +-------------------------------+ | 0.000000 | +-------------------------------+ 1 row in set (0.00 sec)
ตัวอย่างเพิ่มเติม: ค้นหาผลรวมของชื่อที่ไม่มีในตาราง
mysql> SELECT COALESCE(SUM(daily_typing_pages),0) FROM employee_tbl WHERE Name = 'Mohan'; +-------------------------+ | SUM(daily_typing_pages) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.00 sec)
สรุป: SUM() จะคืนค่า NULL หากไม่มีค่าในคอลัมน์ ไม่ว่าจะเป็นชนิดข้อมูลใดก็ตาม การใช้ COALESCE() ช่วยให้สามารถกำหนดค่าเริ่มต้นเป็น 0 ได้