sql - 查询将分组行中的某些列映射到同一行中的多个列的表
问题描述
我正在使用 postgres,我有一个如下所示的表:
f_id1 f_id2 f_id3 f_id4 value
1 1 1 1 'aaa'
1 1 1 2 'bbb'
2 1 1 1 'ccc'
2 1 1 2 'ddd'
1 2 1 1 'eee'
1 2 1 2 'fff'
1 1 2 1 'ggg'
1 1 2 2 'hhhh'
2 2 1 1 'iii'
2 2 1 2 'jjj'
我想查询这个表,结果是每个唯一的 f_id1、f_id2、f_id3 组合都有一行,每个 f_id4 是该行中具有 value 值的列。
所以对于这张表,我希望我的输出是
f_id1 f_id2 f_id3 f_id4_1 f_id4_2
1 1 1 'aaa' 'bbb'
2 1 1 'ccc' 'ddd'
1 2 1 'eee' 'fff'
1 1 2 'ggg' 'hhh'
2 2 1 'iii' 'jjj'
我们可以假设我们事先知道所有可能的 f_id4 值(在本例 1 和 2 中)。
我们还可以假设我们事先知道所有可能的 f_id1、f_id2 和 f_id3 值(在示例中也只有 1 和 2)。
解决方案
您需要条件聚合。这可以使用FILTER
子句来完成,例如:
SELECT
f_id1,
f_id2,
f_id3,
MAX(value) FILTER (WHERE f_id4 = 1) as f_id4_1,
MAX(value) FILTER (WHERE f_id4 = 2) as f_id4_2
FROM
mytable
GROUP BY 1,2,3
推荐阅读
- angular - Flex Layout 内容显示不准确
- javascript - 如何将 Javascript 函数调用传递给 PHP 中的变量
- php - laravel:转换为 json 时缺少 Eloquent all() 数据
- angular - 使用函数在 Firebase 上提供 i18n Angular 应用程序
- dart - 在 IntelliJ IDE 中运行 Dart 示例项目时出错
- firebase - 将 BuildFire 与 Firebase api 集成
- c# - 如何在水晶报表中导出到excel时重新格式化子报表链接
- craftcms - 向管理面板添加新的客户端字段并进行管理
- javascript - 数组作为键和值,但值未定义
- excel - 在下一个用户窗体上将变量值分配给文本框