我具有以下架构和数据:
create table chips (
ID serial PRIMARY KEY,
name VARCHAR (255) NOT NULL
);
create table test_records (
chip_id INTEGER,
some_val VARCHAR (255),
record INTEGER
);
insert into chips values
(1,'chip_1'),
(2,'chip_2');
insert into test_records values
(1,'thumbnail',53),
(1,'first_failure',42),
(1,'another_metric',33),
(2,'thumbnail',54)
然后我尝试运行以下sql:
select *
FROM
chips
INNER JOIN test_records ON test_records.chip_id = chips.id
WHERE
chips.id = 1
这有效。我在这里有一个小提琴:https://www.db-fiddle.com/f/qMmJ6UxMfx8Fd87wgAsaBs/0
但是我想做的是类似的事情>>
select chip.id test_record.thumbnail test_record.first_failure FROM test_records INNER JOIN chips ON chips.id = test_record.chips WHERE chips.id = 1
并且只有一行看起来像
(chip_id:1, thumbnail:53,first_failure:42)
这当然不起作用,因为缩略图和first_failure不是列。我基本上希望它在那些连接的chip_id为1的情况下,在some_val中查找值为缩略图或首次失败的值,并将记录归为结果。
我知道这是开放式的。我什至不知道从哪里开始。这是我需要数据透视表的地方吗?我对这些内容了解不多,但是在查询过程中会创建一个临时表。还是我需要子查询?我在其中选择(查询缩略图记录)AS缩略图,(查询first_failure AS首次失败)。还是更容易,而且我使事情复杂化了。]
也欢迎任何标题的改进。
我具有以下架构和数据:创建表芯片(ID串行PRIMARY KEY,名称VARCHAR(255)NOT NULL);创建表test_records(chip_id INTEGER,some_val VARCHAR(255),...
您似乎正在寻找条件聚合:
以下内容接近。它返回:
我想您将要使用json表示该结果行。您可以使用json functions来构造它,特别是aggregate function json_object_agg
: