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

การใช้ CASE WHEN กับ SELECT แสดงเลขคี่/คู่ใน MySQL

ใช้ CASE WHEN ร่วมกับ MODULO (%) เพื่อตรวจสอบว่า ID เป็นเลขคี่หรือคู่

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    PageId int ); 
Query OK, 0 rows affected (0.85 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values(233); Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable values(34); Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(76); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(89); Query OK, 1 row affected (0.26 sec)

แสดงข้อมูลทั้งหมด

mysql> select *from DemoTable;
+--------+
| PageId |
+--------+
|    233 |
|     34 |
|     76 |
|     89 |
+--------+
4 rows in set (0.00 sec)

คิวรี่ CASE WHEN แสดงคี่/คู่

mysql> select PageId, case when PageId %2 !=0 then 'PageId is odd' else 'PageId is even' end AS Result from DemoTable;

ผลลัพธ์:

+--------+----------------+
| PageId | Result         |
+--------+----------------+
|    233 | PageId is odd  |
|     34 | PageId is even |
|     76 | PageId is even |
|     89 | PageId is odd  |
+--------+----------------+
4 rows in set (0.00 sec)

คำอธิบาย

  • PageId % 2 - Modulo operator คืนค่าเศษจากการหาร 2
  • != 0 - เศษไม่ใช่ 0 = เลขคี่
  • = 0 - เศษเป็น 0 = เลขคู่

รูปแบบ CASE WHEN ทั้งสองแบบ

-- Searched CASE (ใช้ในตัวอย่าง)
CASE WHEN condition THEN result ELSE default END

-- Simple CASE
CASE PageId % 2 WHEN 1 THEN 'Odd' ELSE 'Even' END

การใช้งานอื่นๆ

  • Zebra Striping: เรียงสีสลับในรายงาน CASE WHEN ROW_NUMBER() OVER() % 2 = 0 THEN 'even' ELSE 'odd' END
  • Pagination: แยกหน้าคู่/คี่
  • Distribution: แจกงานให้ Worker สลับกัน