MySQL GROUP_CONCAT() 对待第一个值的方式与其他值不同

标签 mysql sql

我不确定这是否可行,但我正在努力在 GROUP_CONCAT() 选择中创建项目的“路径”,而不考虑使用 MIN() 我知道我做不到。

示例数据

  • ID:[1, 1, 1, 2, 2]
  • 数字:[1, 2, 3, 2, 3]
  • :[A-B、B-C、C-D、E-G、G-Z]

我希望 ID12 得到这样的结果:

  • ID路径
  • 1A-B-C-D
  • 2E-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;

但是当 IDNumber 列不从 1 开始时,这不起作用。我理想情况下希望从 开始MIN()NumberID 但我不能这样做。是否有条件地对 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/

相关文章:

MySQL - 传输数据

sql - 如何使用 ARM 模板将数据网关添加到 SQL 连接器

php - LIKE查询无法检索数据,为什么?

java - 如何在 JDBC 中创建断言?

mysql - SQL - 分组表

php - 如何将Excel文件上传到单个MySQL表?

MySql:仍然匹配所有的受限语句 - 使用通配符?

mysql - Laravel 多个 where 子句

sql - 准备好的语句中的重复参数

php - 基于子查询值的 MySql 查询限制