sql - 如何使用 postgresql 转换表
问题描述
我想从 db 中选择这个字段:
order_id | item1_category | item2_category | item3_category
1 | book | food | drink
但我所拥有的只是:
order_id | item_category
1 | book
1 | food
1 | drink
我怎样才能把我的桌子变成我需要的样子?谢谢
解决方案
一种方法是条件聚合:
select order_id,
max(item_category) filter (where seqnum = 1) as item_category_1,
max(item_category) filter (where seqnum = 2) as item_category_2,
max(item_category) filter (where seqnum = 3) as item_category_3
from (select t.*,
row_number() over (partition by order_id order by item_category) as seqnum
from t
) t
group by order_id;
另一个用途array_agg()
:
select order_id,
(array_agg(item_category order by item_category))[1] as item_category_1,
(array_agg(item_category order by item_category))[2] as item_category_2,
(array_agg(item_category order by item_category))[3] as item_category_3
from t
group by order_id;
推荐阅读
- c++ - Dijkstra 算法需要什么样的图表?C++
- javascript - 如何在值之间用逗号推送数组
- c - 带有 argp.h 的帮助消息中的文本间距错误
- php - 如何过滤属于特定类别的帖子 [产品]
- google-chrome - 从扩展打开背景选项卡
- python - 使用 Tweepy 时如何删除 Twitter 帖子的链接?
- python - 如何将列值与另一个数据框中的行值匹配,每行有多个值?
- python - OSError: [Errno 22] 使用 torch.load 时参数无效
- mysql - mysql 命令行 - 大型 sql 文件 - 不正确的字符串值
- amazon-web-services - AWS 中的 Elastic Beanstalk 仅使用我的 Dockerfile,而不是我的 Docker Compose 文件