首页 > 解决方案 > SQLite3:将行与公共列合并

问题描述

在某些情况下,我在 SQLite3 中有一个表,目前看起来像这样:

表breed_merge的数据库浏览器视图

我要做的是合并具有相同品种的行。在这两种情况下都不会填充相同的列。到目前为止,我已经尝试过这种查询,但它并没有真正完成我正在寻找的工作,因为它不会根据需要删除重复数据或合并行。此外,如果不必手动输入每个列名,似乎很难推广到所有列。

select distinct t1.breed, coalesce(t1.dog_group_1, t2.dog_group_1) from breed_merge t1 left join breed_merge t2 on t1.breed = t2.breed;

输出:

Afador|
Affenhuahua|
Affenpinscher|
Affenpinscher|GROUP 1 - TOYS
Afghan Hound|
Afghan Hound|GROUP 4 - HOUNDS
...

期望的输出:

Afador|
Affenhuahua|
Affenpinscher|GROUP 1 - TOYS
Afghan Hound|GROUP 4 - HOUNDS
...

标签: sqlsqlitesql-merge

解决方案


对于此示例数据,每个品种最多有 2 行,并且这 2 行(如果存在)中的每一行都包含一个值 or null,您所要做的就是分组并像其他每一列breed一样使用聚合函数MAX()

SELECT breed, MAX(imgsrc) imgsrc, MAX(dog_group_1) dog_group_1, .....
FROM breed_merge 
GROUP BY breed

推荐阅读