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

0

Я использую эту таблицу из набора данных 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 |
+--------+---------------+

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

  • 0
    заказать по номеру?
Теги:
ssms-2017
northwind

3 ответа

1

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

Order by NumOrders 

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

  • 0
    Привет Симонаре, Нет, это не сработает. Таким образом, мне нужно будет добавить NumOrders в группу group by. и полученный результат не то, что я ищу.
0

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

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 |
+--------+-------+
  • 0
    Привет, Strawberry, вывод этой таблицы подсчитывает количество случаев в каждом сегменте. Мне нужна «сумма» количества клиентов в каждом ведре. (как указано в желаемом выводе в моем вопросе)
0

Вы можете добавить предложение ORDER BY, которое выполняет условное упорядочение, например:

order by 
(
    case Bucket 
        when '0 - 5'  then 1
        when '6 - 10' then 2
        when '10+'    then 3
    end 
)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню