Сортировать по всей группе

голоса
1

У меня есть таблица вроде этого:

Brand | Type | Units
Sony | TV | 5
Toshiba | TV | 4
Sony | Radio | 1
Toshiba | Radio | 10

и я хочу это так:

Type | Brand | Units
Radio | Toshiba | 10
Radio | Sony | 1
TV | Sony | 5
TV | Toshiba | 4

То есть, заказать его по типу , Марка Количество на основе Type ( в 10 + 1 против 5 + 4) , а затем на количестве единиц (10 против 1 и 5 против 4).

Как вы думаете, это лучший способ для достижения этой цели?

Я попытался следующие, добавляющий подытог по каждой группе:

select Type, Brand, sum(Units) from mytable
group by Type, Brand, sum(Units) WITH ROLLUP

Type | Brand | sum(Units)
Radio | Toshiba | 10
Radio | Sony | 1
Radio | null | 11
TV | Sony | 5
TV | Toshiba | 4
TV | null | 9
null | null | 20

Но я не вижу никакого способа сортировки этих подытог.

Задан 07/10/2015 в 20:40
пользователем
На других языках...                            


2 ответов

голоса
1

Вы можете обратиться к Вашему запросу в качестве суб-запроса и выполнить заказ на основе требуемых столбцов.

select type, brand, total
from (
select Type, Brand, sum(Units) as total
from mytable
group by Type, Brand, sum(Units) WITH ROLLUP) t
order by type, total desc
Ответил 07/10/2015 в 20:46
источник пользователем

голоса
0

Вы хотите заказать в общей сложности для первого типа на основе его общего количества. В MySQL, вы можете сделать это с явной агрегацией и а join:

select tb.*
from (select Type, Brand, sum(Units) as sumunits
      from mytable
      group by Type, Brand
     ) tb join
     (select Type, sum(Units) as sumunits
      from mytable
      group by Type
     ) t
     on tb.type = t.type
order by t.sumunits desc, tb.sumunits desc;
Ответил 07/10/2015 в 20:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more