将sql联接的两个结果合并为一个结果
我正在做一个作业,我需要以以下格式获取和显示postgres DB数据 我想问的问题是将sql联接的两个结果合并为一个结果,sql,postgresql,join,Sql,Postgresql,Join,我正在做一个作业,我需要以以下格式获取和显示postgres DB数据 我想问的问题是 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
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 (
id,
field_name_id,
integer_value,
String_value
)
考虑以下跨越用户
、字段名
和字段值
等表格的用户记录
user_id source_id source_name amount
10 100 source-1 100
对于上面的记录,上面的sql查询给了我两个结果,比如
任何关于如何实现所需结果并将两个结果合并为一个结果的建议,如图开始所示
源id和源名称组合不会变化,但多个用户可以具有相同的组合
编辑
详细的表格结构和样本数据如下所示:
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
您的逻辑有点难以理解,因为您的查询返回三列,但数据有四列 如果希望每个用户有一行,则
分组依据
应仅包含一个键--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;
请给我们看一下表格数据。请将其作为可复制文本而不是图像插入问题@S-Man添加了一些关于表结构和示例数据的详细信息源id、源名称组合可以跨用户复制。这意味着多个用户可以具有相同的源\ id、源\名称值。在这种情况下,使用您建议的查询,结果将按用户id分组,并且对于相同的source\u id、source\u name组合,我会得到多个结果。我想获得来源id、来源名称的唯一组合的付款总额。