【问题标题】:concatenate similar rows into one MYSQL将相似的行连接成一个 MYSQL
【发布时间】:2018-02-12 15:03:36
【问题描述】:

例如,我有 40 行

|name | type | addr_index | numbers |
 - - - - - - - - - - - - - - - -
 john  1       46001       1,2,3 
 doe   1       67002       1,2,3 
 john  2       67002       10,22,34
 john  2       67002       7,4,3,2 

如何选择具有相同数据(名称、类型、地址索引)的行,并将 numbers 列连接到一行?喜欢

|name | type | addr_index | numbers |
 - - - - - - - - - - - - - - - -
 john  1       46001       1,2,3 
 doe   1       67002       1,2,3 
 john  2       67002       1,2,3,10,22,34

【问题讨论】:

标签: mysql


【解决方案1】:

使用GROUP_CONCAT

语法

GROUP_CONCAT([DISTINCT] expr [,expr ...]
         [ORDER BY {unsigned_integer | col_name | expr}
             [ASC | DESC] [,col_name ...]]
         [SEPARATOR str_val])

默认分隔符是,。如果您需要除逗号之外的另一个分隔符,那么您可以通过,

GROUP_CONCAT(expr separator 'char');

查询

SELECT `name`, `type`, `addr_index `,
GROUP_CONCAT(`numbers`)
FROM `your_table_name`
GROUP BY `name`, `type`, `addr_index `;

【讨论】:

  • 如果名称或类型不同怎么办?我需要比较名字类型,addr_index,然后连接计算的数据
【解决方案2】:

你可以使用组连接

select name, type , addr_index , group_concat( numbers )
from my_table 
group by name, type , addr_index

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2018-02-16
    • 2011-09-20
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多