Subquery ใน IF()
ใส่ SELECT ... เป็นอาร์กิวเมนต์แรก (Condition) ของ IF()
ข้อมูล Students
+----+-----------+-----------+----------+----------------+
| id | Name | Country | Language | Course |
+----+-----------+-----------+----------+----------------+
| 1 | Francis | UK | English | Literature |
| 2 | Rick | USA | English | History |
| 3 | Correy | USA | English | Computers |
| 4 | Shane | France | French | Computers |
| 5 | Validimir | Russia | Russian | Computers |
| 6 | Steve | Australia | English | Geoinformatics |
| 7 | Rahul | India | Hindi | Yoga |
| 8 | Harshit | India | Hindi | Computers |
| 9 | Harry | NZ | English | Electronics |
+----+-----------+-----------+----------+----------------+
คำสั่ง: นับ English vs Non-English แล้วแสดง Name หรือ Course
SELECT ID,
IF(
(SELECT COUNT(*) FROM Students WHERE Language = 'English') >
(SELECT COUNT(*) FROM Students WHERE Language <> 'English'),
CONCAT('Name is ', Name),
CONCAT('Course is ', Course)
) AS 'Name/Course'
FROM Students;
ผลลัพธ์ (English มากกว่า → แสดง Name)
+----+-------------------+
| ID | Name/Course |
+----+-------------------+
| 1 | Name is Francis |
| 2 | Name is Rick |
| 3 | Name is Correy |
| 4 | Name is Shane |
| 5 | Name is Validimir |
| 6 | Name is Steve |
| 7 | Name is Rahul |
| 8 | Name is Harshit |
| 9 | Name is Harry |
+----+-------------------+
การอธิบาย
- Subquery นับคนภาษา English = 5 คน
- Subquery นับคนไม่ใช่ English = 4 คน
- 5 > 4 → TRUE → แสดง "Name is ..."
- Subquery รันเพียงครั้งเดียว (Optimizer จัดการ)