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

จัดกลุ่มข้อมูลตามช่วงค่า (GROUP BY Range) ใน MySQL

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) จัดกลุ่มตามชั่วโมง