Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ SELECT Statement เป็นอาร์กิวเมนต์ของ IF()

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 จัดการ)