我不确定这是否可行,但我正在努力在 GROUP_CONCAT()
选择中创建项目的“路径”,而不考虑使用 MIN()
我知道我做不到。
示例数据
ID
:[1, 1, 1, 2, 2]
数字
:[1, 2, 3, 2, 3]
腿
:[A-B、B-C、C-D、E-G、G-Z]
我希望 ID
的 1
和 2
得到这样的结果:
ID
、路径
1
、A-B-C-D
2
、E-G-Z
我目前正在使用以下GROUP_CONCAT()
SELECT ID, GROUP_CONCAT(CASE WHEN Number = 1 THEN Leg ELSE RIGHT(Leg, 1) END SEPARATOR '-')
Path FROM my_table GROUP BY ID;
但是当 ID
的 Number
列不从 1 开始时,这不起作用。我理想情况下希望从 开始MIN()
的 Number
和 ID
但我不能这样做。是否有条件地对 GROUP_CONCAT() 中的第一个值执行此操作?
最佳答案
你可以这样做:
SELECT ID,
CONCAT_WS('-',
SUBSTRING_INDEX(GROUP_CONCAT(LEFT(Leg, 1) ORDER BY NUMBER), ',', 1),
GROUP_CONCAT(RIGHT(Leg, 1) ORDER BY NUMBER SEPARATOR '-')
)
FROM my_table
GROUP BY id;
注意:您的查询中也应该包含分隔符。
关于MySQL GROUP_CONCAT() 对待第一个值的方式与其他值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720365/