คำอธิบาย
COALESCE() คืนค่า NON-NULL แรก จากรายการอาร์กิวเมนต์ (ซ้ายไปขวา) หากทุกค่าเป็น NULL คืน NULL
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Number1 int,
Number2 int );
Query OK, 0 rows affected (5.48 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values(100, 200); Query OK, 1 row affected (0.40 sec) mysql> insert into DemoTable values(NULL, 50); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(10, NULL); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(NULL, NULL); Query OK, 1 row affected (0.08 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+---------+---------+ | Number1 | Number2 | +---------+---------+ | 100 | 200 | | NULL | 50 | | 10 | NULL | | NULL | NULL | +---------+---------+ 4 rows in set (0.00 sec)
คิวรี่ COALESCE(Number1, Number2)
mysql> select coalesce(Number1, Number2) AS NON_NULL_ARGUMENT_FIRST from DemoTable;
ผลลัพธ์
+-------------------------+ | NON_NULL_ARGUMENT_FIRST | +-------------------------+ | 100 | | 50 | | 10 | | NULL | +-------------------------+ 4 rows in set (0.00 sec)
คำอธิบายแต่ละแถว
| Number1 | Number2 | COALESCE | เหตุผล |
|---|---|---|---|
| 100 | 200 | 100 | Number1 ไม่เป็น NULL → เอา Number1 |
| NULL | 50 | 50 | Number1 เป็น NULL → ไป Number2 → 50 |
| 10 | NULL | 10 | Number1 ไม่เป็น NULL → เอา Number1 |
| NULL | NULL | NULL | ทั้งคู่เป็น NULL → คืน NULL |
การประยุกต์ใช้
- แสดงค่า Default เมื่อคอลัมน์เป็น NULL:
COALESCE(phone, email, 'N/A') - คำนวณค่าที่อาจเป็น NULL:
COALESCE(discount, 0) * price - เรียงลำดับ NULL ไปท้าย:
ORDER BY COALESCE(sort_order, 9999)
COALESCE vs IFNULL
- COALESCE: มาตรฐาน ANSI SQL, รับอาร์กิวเมนต์ได้มากกว่า 2 ตัว
- IFNULL: MySQL Specific, รับแค่ 2 ตัว
- แนะนำใช้ COALESCE สำหรับ Portability