整组订购

问题描述 投票:0回答:2

我有一张这样的桌子:

品牌 类型 单位
索尼 电视 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

但我看不出如何按这些小计进行排序。

mysql sql rollup
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

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;
© www.soinside.com 2019 - 2024. All rights reserved.