ใช้ ORDER BY CASE เพื่อจัดกลุ่มข้อมูล: กลุ่มแรกสุ่ม (RAND()) กลุ่มต่อไปเรียงตามเกณฑ์ (เช่น Number ASC)
ตัวอย่าง: Position='Highest' สุ่ม, Position='Lowest' เรียง Number น้อยไปมาก
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1926 ( Position varchar(20), Number int ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1926 values('Highest',50); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Highest',30); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',100); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',120); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1926 values('Lowest',90); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1926;
+----------+--------+ | Position | Number | +----------+--------+ | Highest | 50 | | Highest | 30 | | Lowest | 100 | | Lowest | 120 | | Lowest | 90 | +----------+--------+ 5 rows in set (0.00 sec)
2. เรียง: Lowest ก่อน (Number ASC), Highest ท้าย (Random)
mysql> select * from DemoTable1926
-> order by Position desc,
-> case Position when 'Highest' then rand() else Number end asc;
ผลลัพธ์ (ตัวอย่าง - Highest จะสุ่มทุกครั้ง):
+----------+--------+ | Position | Number | +----------+--------+ | Lowest | 90 | | Lowest | 100 | | Lowest | 120 | | Highest | 50 | | Highest | 30 | +----------+--------+ 5 rows in set (0.00 sec)
อธิบาย ORDER BY
Position DESC- 'Lowest' (L) > 'Highest' (H) ใน ASCII → Lowest อยู่บนCASE Position WHEN 'Highest' THEN RAND() ELSE Number END:- Lowest → ใช้ Number เรียง 90, 100, 120
- Highest → ใช้ RAND() สุ่มลำดับทุกครั้งที่ Query
รูปแบบ CASE ใน ORDER BY
| Pattern | Syntax | ใช้เมื่อ |
|---|---|---|
| Simple CASE | CASE col WHEN val1 THEN sort1 WHEN val2 THEN sort2 END | เปรียบเทียบค่าเดียว |
| Searched CASE | CASE WHEN condition1 THEN sort1 WHEN condition2 THEN sort2 END | เงื่อนไขซับซ้อน |
ตัวอย่างเพิ่มเติม: ใส่ค่าเฉพาะด้านบน แล้วค่อยเรียงอื่นๆ
SELECT * FROM products
ORDER BY
CASE WHEN category = 'Featured' THEN 0 ELSE 1 END, -- Featured บนสุด
CASE WHEN category = 'Featured' THEN RAND() ELSE price END; -- Featured สุ่ม, อื่นๆ เรียงราคา
สรุป: ใช้ ORDER BY CASE WHEN condition THEN RAND() ELSE sort_column END เพื่อผสม Random และ Deterministic Sorting ใน Query เดียว