gpt4 book ai didi

mysql - SQL SELECT 查询,组合匹配的行,在相等的地方使用一个列值或在不相等的地方连接

转载 作者:行者123 更新时间:2023-11-29 07:17:06 24 4
gpt4 key购买 nike

我无法提出如标题所述那样执行的查询。基本上,这是一个示例表

+-------+------+-----------+-----------+-----------+
| Class | Sect | otherCol1 | otherCol2 | otherCol3 |
+-------+------+-----------+-----------+-----------+
| abc | 100 | 3 | 4 | 5 |
| def | 100 | 5 | 6 | 7 |
| abc | 100 | 3 | loco | guys |
| def | 100 | guys | 6 | 77 |
+-------+------+-----------+-----------+-----------+

我想要的结果是

+-------+------+-----------+-----------+-----------+
| Class | Sect | otherCol1 | otherCol2 | otherCol3 |
+-------+------+-----------+-----------+-----------+
| abc | 100 | 3 | 4loco | 5guys |
| def | 100 | 5guys | 6 | 777 |
+-------+------+-----------+-----------+-----------+

重要的是组合元素的顺序保持一致。例如,如果新行显示“4loco”,则应显示“5guys”。如果它说“loco4”,那么它应该说“guys5”。

我目前拥有的 MySQL 查询似乎接近我想要的,但它无法连接所有匹配项。一些列将保持未连接,而其他列将适当连接。它也不会在为给定行连接的列中保持一致的顺序。

这是我的查询的简化版本,它与我正在运行的查询执行相同的操作,但列数比我实际使用的要少:

SELECT 
IF(
t1.Class = t2.Class,
t1.Class,
GROUP_CONCAT(DISTINCT t1.Class SEPARATOR ' ')
),
IF(
t1.Sect = t2.Sect,
t1.Sect,
GROUP_CONCAT(DISTINCT t1.Sect SEPARATOR ' ')
),
IF(
t1.otherCol1 = t2.otherCol1,
t1.otherCol1,
GROuP_CONCAT(DISTINCT t1.otherCol1 SEPARATOR ' ')
),
IF(
t1.otherCol2 = t2.otherCol2,
t1.otherCol2,
GROUP_CONCAT(DISTINCT t1.otherCol2 SEPARATOR ' ')
),
IF(
t1.otherCol3 = t2.otherCol3, t1.otherCol3,
GROUP_CONCAT(DISTINCT t1.otherCol3 SEPARATOR ' ')
)
FROM sample_sheet t1
JOIN sample_sheet t2
ON t1.Sect = t2.Sect
AND t1.Class = t2.Class
GROUP BY t1.Sect, t1.Class

所有不是 ClassSect 的列都可以根据它们的值进行连接。我只需要在值不相等时进行串联,因此使用 if 语句。

最佳答案

您可以聚合并使用group_concat(distinct ...)

为了保持顺序一致,您需要一个可用于对记录进行排序的列(或列的组合);我在您的数据中看不到这样的列,但我假设它存在,我将其命名为 id

select 
class,
sect,
group_concat(distinct otherCol1 order by id separator '') otherCol1,
group_concat(distinct otherCol2 order by id separator '') otherCol2,
group_concat(distinct otherCol3 order by id separator '') otherCol3
from mytable
group by
class,
sect

关于mysql - SQL SELECT 查询,组合匹配的行,在相等的地方使用一个列值或在不相等的地方连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com