sql - 将一些类别作为列名
问题描述
我有一张看起来像这样的桌子:
月 | 地区 | 类别 | 尺寸 | 品牌 | 价格 |
---|---|---|---|---|---|
一月 | 加拿大 | T 恤 | 小号 | 耐克 | 100 |
一月 | 加拿大 | T 恤 | 小号 | 锐步 | 150 |
一月 | 加拿大 | T 恤 | 小号 | 彪马 | 200 |
一月 | 加拿大 | 夹克 | 小号 | 耐克 | 200 |
一月 | 加拿大 | 夹克 | 小号 | 锐步 | 300 |
一月 | 美国 | 夹克 | 大号 | 彪马 | 400 |
一月 | 美国 | 夹克 | 大号 | 锐步 | 500 |
- 我想让表格看起来像这样(不需要聚合函数):
月 | 地区 | 类别 | 尺寸 | 耐克 | 锐步 | 彪马 |
---|---|---|---|---|---|---|
一月 | 加拿大 | T 恤 | 小号 | 100 | 150 | 200 |
一月 | 加拿大 | 夹克 | 小号 | 400 | 300 | 空值 |
一月 | 美国 | 夹克 | 大号 | 空值 | 500 | 400 |
- 我想选择具有相同月份、地区、类别和尺寸值的行耐克价格高于其他任何行。对于上表结果应该是:
月 | 地区 | 类别 | 尺寸 | 耐克 | 锐步 | 彪马 |
---|---|---|---|---|---|---|
一月 | 加拿大 | 夹克 | 小号 | 400 | 300 | 空值 |
解决方案
您似乎想要条件聚合,然后进行一些过滤。
select *
from (select Month, Region, Category, Size,
max(case when brand = 'Nike' then price end) as nike,
max(case when brand = 'Reebok' then price end) as Reebok,
max(case when brand = 'Puma' then price end) as Puma
from t
group by Month, Region, Category, Size
) t
where nike > coalesce(Reebok, 0) and
nike > coalesce(Puma, 0);
推荐阅读
- python - 下一页 python beautifulsoup
- api - API访问&OAuth
- kubernetes - 1 个节点具有 pod 无法容忍的污点并且 pod 无法启动
- java - NoClassDefFoundError:无法初始化类 com.google.inject.internal.Annotations
- javascript - 如何通过数组计算变量中包含的数据
- sql-server - SSRS 仅按客户合计金额总和的中间行
- postgresql - 如何删除具有不同数据类型的行?
- python - 如何正确按日期对列表进行排序?
- openlayers - 单个 VectorTile 图层加载的许多“postrender”和“rendercomplete”事件
- arrays - 消除具有 DUPLICATE PAIRS 元素的数组行