首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一整群人的命令

问一整群人的命令
EN

Stack Overflow用户
提问于 2015-10-07 21:40:46
回答 2查看 32关注 0票数 1

我有一张这样的桌子:

代码语言:javascript
复制
Brand | Type | Units
Sony | TV | 5
Toshiba | TV | 4
Sony | Radio | 1
Toshiba | Radio | 10

我想要这样:

代码语言:javascript
复制
Type | Brand | Units
Radio | Toshiba | 10
Radio | Sony | 1
TV | Sony | 5
TV | Toshiba | 4

也就是说,按类型的,品牌的类型计数(10+1 vs 5+4),然后根据单位的计数(10 vs 1和5 vs 4)来订购。

你认为实现这一目标的最佳途径是什么?

我尝试了以下方法,在每个组中添加一个小计:

代码语言:javascript
复制
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

但我看不出有什么办法按这些小计分类。

EN

回答 2

Stack Overflow用户

发布于 2015-10-07 21:46:06

您可以将查询作为子查询引用,并根据所需列执行排序。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-10-07 21:57:56

您希望首先根据类型的总数为其总计进行排序。在MySQL中,可以使用显式聚合和join来完成这一任务。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33002884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档