MySQL GROUP_CONCAT()将第一个值与其他值区别开来

时间:2017-08-16 18:10:32

标签: mysql sql

我不确定这是否可行,但我正在努力在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
  • Path1
  • A-B-C-D2

我目前正在使用以下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中的第一个值进行处理吗?

1 个答案:

答案 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;

注意:您的查询中也应包含分隔符。