我有一张这样的桌子:
品牌 | 类型 | 单位 |
---|---|---|
索尼 | 电视 | 5 |
东芝 | 电视 | 4 |
索尼 | 广播 | 1 |
东芝 | 广播 | 10 |
我想要这样的:
类型 | 品牌 | 单位 |
---|---|---|
广播 | 东芝 | 10 |
广播 | 索尼 | 1 |
电视 | 索尼 | 5 |
电视 | 东芝 | 4 |
也就是说,按类型、品牌排序,基于类型的数量(10+1 vs 5+4),然后根据单位数量(10 vs 1 & 5 vs 4)。
您认为实现这一目标的最佳方法是什么?
我尝试了以下方法,在每个组下添加小计:
select Type, Brand, sum(Units) from mytable
group by Type, Brand, sum(Units) WITH ROLLUP
类型 | 品牌 | 总和(单位) |
---|---|---|
广播 | 东芝 | 10 |
广播 | 索尼 | 1 |
广播 | 空 | 11 |
电视 | 索尼 | 5 |
电视 | 东芝 | 4 |
电视 | 空 | 9 |
空 | 空 | 20 |
但我看不出如何按这些小计进行排序。
您可以将查询作为子查询引用,并根据所需的列执行排序。
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
您希望首先根据类型的总计来按类型的总计进行排序。 在 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;