การเรียงลำดับด้วยผลหารคงเหลือ (Modulus) ใน ORDER BY
เราสามารถใช้ตัวดำเนินการ Modulus (%) ในคำสั่ง ORDER BY เพื่อเรียงลำดับแถวตามเศษจากการหารคอลัมน์ตัวเลข
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
StudentId INT,
StudentName VARCHAR(100)
);
Query OK, 0 rows affected (1.88 sec)
mysql> INSERT INTO DemoTable VALUES(100,'Chris');
mysql> INSERT INTO DemoTable VALUES(101,'Robert');
mysql> INSERT INTO DemoTable VALUES(102,'David');
mysql> INSERT INTO DemoTable VALUES(103,'Mike');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 100 | Chris |
| 101 | Robert |
| 102 | David |
| 103 | Mike |
+-----------+-------------+
4 rows in set (0.00 sec)
คำสั่งเรียงตาม StudentId % 2 แล้วตาม StudentId % 3
mysql> SELECT StudentId, StudentName, StudentId % 2, StudentId % 3
FROM DemoTable ORDER BY StudentId % 2, StudentId % 3;
ผลลัพธ์:
+-----------+-------------+---------------+---------------+
| StudentId | StudentName | StudentId % 2 | StudentId % 3 |
+-----------+-------------+---------------+---------------+
| 102 | David | 0 | 0 |
| 100 | Chris | 0 | 1 |
| 103 | Mike | 1 | 1 |
| 101 | Robert | 1 | 2 |
+-----------+-------------+---------------+---------------+
4 rows in set (0.00 sec)
คำอธิบาย
StudentId % 2: เศษจากการหาร 2 (คู่=0, คี่=1) → เรียงคู่ก่อน คี่ทีหลังStudentId % 3: เศษจากการหาร 3 (0,1,2) → ใช้สำหรับเรียงย่อยภายในกลุ่มคู่/คี่- 102: %2=0, %3=0 → อันดับ 1
- 100: %2=0, %3=1 → อันดับ 2
- 103: %2=1, %3=1 → อันดับ 3
- 101: %2=1, %3=2 → อันดับ 4
- เทคนิคนี้ใช้ได้กับการจัดกลุ่มข้อมูลแบบ Cyclic หรือ Round-robin