mysql - 合并多行消除重复并连接多列

标签 mysql distinct concatenation group-concat

我正在使用 mysql 并想要执行以下操作:

  1. 取每列的不同值,如果一条记录存在多个不同值,则进行连接
     user_id  pagetitle     companyname   Category1                         Category2               Category3
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Audio Visual Equipment  Audio Visual Equipment- Rentals
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Audio Visual Equipment  Audio Visual Equipment- Rentals
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Audio Visual Equipment  Audio Visual Equipment- Rentals
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Audio Visual Equipment  Audio Visual Equipment- Rentals
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Outdoor Media           Advertising- Signs, Neon, Glow Etc
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Outdoor Media           Advertising- Signs, Neon, Glow Etc
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Printing & Printers     Digital Printing 
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Printing & Printers     Digital Printing 
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Printing & Printers     Digital Printing 
     509      Digital Arts  Digital Arts  Advertising, Media & Promotions   Printing & Printers     Flexographic Printing 

     user_id  pagetitle     companyname  Category1                       Category2                                                                        Category3
     509      Digital Arts  Digital Arts    Advertising, Media & Promotions Audio Visual Equipment, Outdoor Media, Printing & Printers, Printing & Printers  Audio Visual Equipment- Rentals, Advertising- Signs, Neon, Glow Etc, Digital Printing , Flexographic Printing 

  1. And also merge content from multiple columns to 1 eliminating the empty columns.

    Address buildingname landmark Locality sublocality City State Country pincode 5 Vaniga Valaagam Old Bus Stand Salem Tamilnadu India 636001

As if i use concat() with separators the above also includes empty and include multiple separators.

5, Vaniga Valaagam, , Old Bus Stand, , Salem, Tamilnadu, India - 636001

有人可以建议一种实现这两者的方法吗?

最佳答案

第 1 部分:

SELECT user_id,
   GROUP_CONCAT(DISTINCT pagetitle SEPARATOR ', ' ) as pagetitle,
   GROUP_CONCAT(DISTINCT companyname SEPARATOR ', ' ) as companyname,
   GROUP_CONCAT(DISTINCT Category1 SEPARATOR ', ' ) as Category1,
   GROUP_CONCAT(DISTINCT Category2 SEPARATOR ', ' ) as Category2,
   GROUP_CONCAT(DISTINCT Category3 SEPARATOR ', ' ) as Category3
FROM some_table
GROUP BY user_id

第 2 部分:

连接多个字段并省略空字段

SELECT concat(
  IF(field1>'',concat(field1,', '),''),
  IF(field2>'',concat(field2,', '),''),
  IF(field3>'',concat(field3,', '),'')
  ) as something
FROM somewhere

放在一起:

SELECT concat(
  IF(user_id>'',concat(user_id,', '),''),
  IF(pagetitle>'',concat(pagetitle,', '),''),
  IF(Category1>'',concat(Category1,', '),''),
  IF(Category2>'',concat(Category2,', '),''),
  IF(Category3>'',concat(Category3,', '),'')
  ) as something
FROM
(
SELECT user_id,
   GROUP_CONCAT(DISTINCT pagetitle SEPARATOR ', ' ) as pagetitle,
   GROUP_CONCAT(DISTINCT companyname SEPARATOR ', ' ) as companyname,
   GROUP_CONCAT(DISTINCT Category1 SEPARATOR ', ' ) as Category1,
   GROUP_CONCAT(DISTINCT Category2 SEPARATOR ', ' ) as Category2,
   GROUP_CONCAT(DISTINCT Category3 SEPARATOR ', ' ) as Category3
FROM some_table
GROUP BY user_id
) nicehomework

关于mysql - 合并多行消除重复并连接多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732683/

相关文章:

java - MongoDB 与 Java 中的条件不同

mysql - SQL:连接问题

javascript - 在按钮 JQuery 之后连接列表

php - 当值为日期变量时如何更新 mysql 数据库中的列

php - 让 Phing 的 dbdeploy 任务自动回滚增量错误

java - 使用 JPA 和 Hibernate 时 DISTINCT 是如何工作的

javascript - 连接两个字符串数组的元素 jQuery

php - 包括相关表中的单个项目

sql - 如何从包含组合数据的列中获取结果?

MySQL - 针对一系列列选择不同的值