Не удалось заказать столбец в MySQL

Я использую эту таблицу из набора данных Northwind (может быть сгенерирован из запроса ниже)

+-----------+-----------+
| NumOrders | CustCount |
+-----------+-----------+
|         1 |         1 |
|         2 |         2 |
|         3 |         7 |
|         4 |         6 |
|         5 |        10 |
|         6 |         8 |
|         7 |         7 |
|         8 |         4 |
|         9 |         5 |
|        10 |        11 |
|        11 |         4 |
|        12 |         3 |
|        13 |         3 |
|        14 |         6 |
|        15 |         3 |
|        17 |         1 |
|        18 |         3 |
|        19 |         2 |
|        28 |         1 |
|        30 |         1 |
|        31 |         1 |
+-----------+-----------+`

И я хочу написать запрос, чтобы предоставить гистограмму количества х людей, которые сделали у количество заказов

select 
    case 
        when NumOrders > 0 and NumOrders <= 5 then '0 - 5'
        when NumOrders > 5 and NumOrders <=10 then '6 - 10'
        else '10+' 
    end as Bucket,
    CustomerCount = sum(CustCount)
from (
    select 
        NumOrders,
        CustCount = count(*) 
    from (
        select * 
        from (
            select 
                CustomerID, 
                count(*) as NumOrders
            from orders 
            group by CustomerID
            ) c
        ) b
    group by NumOrders
    )a
group by 
(
    case 
        when NumOrders > 0 and NumOrders <= 5 then '0 - 5'
        when NumOrders > 5 and NumOrders <=10 then '6 - 10'
        else '10+' 
    end 
)

Из запроса выше я получаю этот вывод, который упорядочен неправильно.

+--------+---------------+
| Bucket | CustomerCount |
+--------+---------------+
| 0 - 5  |            26 |
| 10+    |            28 |
| 6 - 10 |            35 |
+--------+---------------+

Я хотел бы, чтобы это было заказано как

+--------+---------------+
| Bucket | CustomerCount |
+--------+---------------+
| 0 - 5  |            26 |
| 6 - 10 |            35 |
| 10+    |            28 |
+--------+---------------+

Может кто-нибудь подсказать, как правильно его заказать?

2 ответа

Вам просто нужно

Order by NumOrders 

в самом конце вашего запроса

Я не вижу, какую часть проблемы не удается решить...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(NumOrders SERIAL PRIMARY KEY
,CustCount INT NOT NULL
);

INSERT INTO my_table VALUES
(1 ,1),
(2 ,2),
(3 ,7),
(4 ,6),
(5 ,0),
(6 ,8),
(7 ,7),
(8 ,4),
(9 ,5),
(10,1),
(11,4),
(12,3),
(13,3),
(14,6),
(15,3),
(17,1),
(18,3),
(19,2),
(28,1),
(30,1),
(31,1);

SELECT CASE WHEN numorders BETWEEN 0 AND  5 THEN '0-5'
            WHEN numorders BETWEEN 6 AND 10 THEN '6-10'
            ELSE '+10' END bucket
      , COUNT(*) total
   FROM my_table
  GROUP
     BY bucket
  ORDER
     BY numorders;
+--------+-------+
| bucket | total |
+--------+-------+
| 0-5    |     5 |
| 6-10   |     5 |
| +10    |    11 |
+--------+-------+
Другие вопросы по тегам