MySQL ไม่มีคำสั่ง GROUP BY RANGE โดยตรง แต่สามารถทำได้โดยการหารค่าด้วยขนาดช่วง แล้วปัดเศษ
ตัวอย่าง: จัดกลุ่มทุก 10 ค่า
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table GroupByRangeDemo (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> YourRangeValue int
-> );
mysql> insert into GroupByRangeDemo(YourRangeValue) values(1),(7),(9),(23),(33),(35),(1017);
2. Query จัดกลุ่ม
mysql> select round(YourRangeValue / 10), count(YourRangeValue)
-> from GroupByRangeDemo
-> where YourRangeValue < 40
-> group by round(YourRangeValue / 10)
-> union
-> select '40+', count(YourRangeValue)
-> from GroupByRangeDemo
-> where YourRangeValue >= 40;
3. ผลลัพธ์
+----------------------------+-----------------------+ | round(YourRangeValue / 10) | count(YourRangeValue) | +----------------------------+-----------------------+ | 0 | 1 | | 1 | 2 | | 2 | 1 | | 3 | 1 | | 4 | 1 | | 40+ | 1 | +----------------------------+-----------------------+
วิธีการอื่น: ใช้ CASE WHEN
SELECT
CASE
WHEN YourRangeValue BETWEEN 0 AND 9 THEN '0-9'
WHEN YourRangeValue BETWEEN 10 AND 19 THEN '10-19'
WHEN YourRangeValue BETWEEN 20 AND 29 THEN '20-29'
WHEN YourRangeValue BETWEEN 30 AND 39 THEN '30-39'
ELSE '40+'
END AS range_group,
COUNT(*) as cnt
FROM GroupByRangeDemo
GROUP BY range_group;
การประยุกต์ใช้
- รายงานอายุ:
FLOOR(age/10)*10สร้างกลุ่ม 0-9, 10-19, 20-29... - รายงานราคา:
FLOOR(price/100)*100สร้างกลุ่ม 0-99, 100-199... - รายงานเวลา:
HOUR(datetime)จัดกลุ่มตามชั่วโมง