我不确定这是否可行,但我正在努力在GROUP_CONCAT()
选择中创建项目的“路径”,而不考虑使用MIN()
,我知道我可以做。
ID
:[1, 1, 1, 2, 2]
Number
:[1, 2, 3, 2, 3]
Leg
:[A-B, B-C, C-D, E-G, G-Z]
我希望ID
的{{1}}和1
得到这样的结果:
2
, ID
Path
,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;
的{{1}}列未从1开始时,这不起作用。理想情况下,我希望在Number
ID
处启动它1}}和MIN()
但我不能这样做。无论如何有条件地对Number
中的第一个值进行处理吗?
答案 0 :(得分:1)
您可以这样做:
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;
注意:您的查询中也应包含分隔符。