sql - 合并表postgresql中相同的行
问题描述
我在 postgresql 中有下表:
id | grade | comment
--------------------
01 | A | Good
01 | B | OK
01 | C | BAD
02 | A | Good
02 | E | Very BAD
02 | D | BAD
我想获取以下格式的记录
id | grade1 | grade2 | grade3 | comment1 | comment2 | comment3
--------------------------------------------------------------
01 | A | B | C | Good | OK | BAD
02 | A | E | D | Good | Very BAD | BAD
任何人都可以帮忙吗?
解决方案
您可以使用row_number()
条件聚合:
select
id,
max(grade) filter(where rn = 1) grade1,
max(grade) filter(where rn = 2) grade2,
max(grade) filter(where rn = 3) grade3,
max(comment) filter(where rn = 1) comment1,
max(comment) filter(where rn = 2) comment2,
max(comment) filter(where rn = 3) comment3
from (
select t.*, row_number() over(partition by id order by grade) rn
from mytable t
) t
group by id
推荐阅读
- html - 图像上需要的文本和按钮
- snowflake-cloud-data-platform - 如果表不存在,我应该如何测试表的存在并使脚本失败?
- xamarin - Xamarin.forms - 解析包时出现问题
- javascript - 通过 JavaScript 转到链接
- llvm - 如何使用 LLVM 获得数据依赖图 (DDG)?
- postgresql - Docker postgrsql not connected in spring boot
- python - 如何将 numpy.float64 数组转换为 float64 数组?
- sql - PostgreSQL - 即使当月没有记录也返回月份
- php - PHP 替换 csv 中的一行在我的本地主机上工作正常,但上传到 cpanel 时不替换该行?
- python - 为什么我收到 GroupShuffleSplit 错误(训练测试拆分)