如何将多行汇总为一个摘要行?

问题描述 投票:1回答:3

我具有以下架构和数据:

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),...

sql postgresql
3个回答
0
投票

您似乎正在寻找条件聚合:


0
投票

以下内容接近。它返回:


0
投票

我想您将要使用json表示该结果行。您可以使用json functions来构造它,特别是aggregate function json_object_agg

© www.soinside.com 2019 - 2024. All rights reserved.