sql - 将sql join的2个结果合并为一个结果
问题描述
我正在执行一项任务,我需要以以下格式获取和显示 postgres 数据库数据。
我正在尝试的查询是,
select fv.integer_value as source_id, fv.string_value as source_name, p.amount as amount from payment p
INNER join user u on p.user_id = u.id
INNER join customer c on u.id = c.user_id
INNER JOIN customer_field_map cfm ON cfm.customer_id = c.id
INNER JOIN field_value fv ON cfm.field_value_id = fv.id
INNER JOIN field_name fn ON fn.id = fv.field_name_id
WHERE fn.name in ('source_id', 'source_name')
group by source_id, source_name, amount;
field_value 表结构是这样的,
field_value (
id,
field_name_id,
integer_value,
String_value
)
考虑以下分布在user
等表中的用户记录field_name
,field_value
user_id source_id source_name amount
10 100 source-1 100
对于上面的记录,上面的 sql 查询给了我 2 个结果,比如,
任何建议如何实现所需的结果并将 2 个结果合并为一个,如开头的图像所示。
source_id 和 source_name 组合不会变化,但多个用户可以有相同的组合。
编辑
详细的表格结构和示例数据在以下几行,
user (
id integer,
user_name character varying (100)
)
id name
------------------------
100 test-name
customer (
id integer,
user_id integer
)
id user_id
------------------------
100 100
payment (
id integer,
user_id integer,
amount numeric
)
id user_id amount
------------------------
100 100 100
field_name (
id integer,
name character varying (100)
)
id name
------------------------
100 source_id
101 source_name
field_value (
id,
field_name_id,
integer_value,
String_value
)
id name integer_value string_value
----------------------------------------------------
100 100 101 null
101 101 null source-1
customer_field_map (
customer_id integer,
field_value_id integer
)
customer_id field_value_id
----------------------------------------------------
100 100
100 101
解决方案
您的逻辑有点难以理解,因为您的查询返回三列,但数据有四列。
如果您希望每个用户一行,那么group by
应该只包含一个键 -- u.id
。所以:
select u.id, max(fv.integer_value) as source_id,
max(fv.string_value) as source_name, p.amount as amount
from payment p join
user u
on p.user_id = u.id join
customer c
on u.id = c.user_id join
customer_field_map cfm
on cfm.customer_id = c.id join
field_value fv
on cfm.field_value_id = fv.id join
field_name fn ON fn.id = fv.field_name_id
where fn.name in ('source_id', 'source_name')
group by u.id;
推荐阅读
- pytorch - 如何使用 pytorch 的 grid_sample()?
- java - 如何在另一个具有更高spring版本的spring项目中使用将spring作为打包依赖项的jar?
- java - 如何重命名由 Lombok 管理的字段
- c++ - 在 C++ 中没有比较器函数的情况下,按对中的第一个元素按递增顺序对对向量进行 stable_sort
- android-studio - 如何在 Android Studio 的 android 模拟器上启用麦克风?
- r - 如何使用 ggplot 和 geom_bar() 在 r 中的条形图上添加 y 轴值?
- python - 如何为 Docker 设置动态值
- angular - 如何修复 Angular 9 应用程序中的 CDK 虚拟滚动。[PokeDex 应用程序]
- php - 使用 ajax 将 Paypal-Buttons(客户端)链接到服务器响应(PHP)
- c - 我需要 C 语言中 CS50 pset1 分配问题(Mario More)的解决方案