-1

在我的数据库中,我有一个名为“结果”的表,其中包含四列(名称、设备、通过、失败)。假设表中有 4 行,如下所示。

name   device   passed failed

test1  device_1    2      1
test1  device_2    3      0
test2  device_1    1      2
test2  device_2    2      1

我想要以下结果:

[(test1,device_1,2,1),(test1,device_2,3,0)]
[(test2,device_1,1,2),(test1,device_2,2,1)]

是否有可能只对 DB 进行一次查询来获得该结果?

目前我正在查询数据库两次,首先获取不同名称的列表,然后获取具有该名称的行。下面是伪代码。

 test_names = SELECT DISTINCT name FROM results
 for test_name in test_names: 
      rows = SELECT * FROM results WHERE name=test_name

然后我正在处理行以获得我想要的对象结构。

4

2 回答 2

1

CONCAT_WS()您需要像and这样的连接函数CONCAT来连接每行的列,然后使用GROUP_CONCAT()for each进行聚合name

SELECT CONCAT('[', GROUP_CONCAT(CONCAT('(', CONCAT_WS(',', name, device, passed, failed), ')')), ']') AS result
FROM results
GROUP BY name

请参阅演示

于 2021-04-10T10:57:04.067 回答
0
 SELECT GROUP_CONCAT('(',name,',',device,',',passed,',',failed,')') FROM results group by name;
于 2021-04-10T10:48:19.537 回答