mysql group去空值,如何在MYSQL中存在空值的GROUP_CONCAT?

I have a long query that returns multiple values for a primary key (from a LEFT join).

For example : (only showing two fields, but there about 10 fields)

LotID Size

1 A

1 B

1 C

2 null

3 B

4 A

4 B

When I use GROUP_CONACT, it returns as follows :

LotID Size

1 A,B,C

3 B

4 A,B

But what I actually want is :

LotID Size

1 A,B,C

2 null

3 B

4 A,B

I tried using

GROUP_CONCAT(CONCAT_WS(',', IFNULL(Size,''))) AS Sizes,

It returns :

LotID Sizes

1 A,B,C,,,

3 B,,

4 A,B,,

It does not return LotID=2, also aditional commas.

How could I do it to get clean records ?

解决方案

You must be doing something wrong with group_concat, because this:

select

lotid,

group_concat(size) size

from tablename

group by lotid

returns:

| lotid | size |

| ----- | ------------------ |

| 1 | A,B,C |

| 2 | null |

| 3 | B |

| 4 | A,B |

See the demo.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL ,可以使用 `GROUP_CONCAT` 函数将分组后的多个值合并为一个字符串。如果你需要将这个字符串的多个值分离,可以使用 MySQL 的内置字符串函数 `SUBSTRING_INDEX`。 例如,假设我们有以下的一张表 `students`: ``` +----+---------+--------+ | id | name | course | +----+---------+--------+ | 1 | Alice | Math | | 2 | Bob | English| | 3 | Charlie | Math | | 4 | Alice | English| | 5 | Bob | Math | | 6 | Alice | Science| +----+---------+--------+ ``` 如果我们要按照学生姓名将课程合并成一个字符串,可以使用如下的 SQL 语句: ``` SELECT name, GROUP_CONCAT(course SEPARATOR ',') AS courses FROM students GROUP BY name; ``` 执行结果如下: ``` +---------+---------------------+ | name | courses | +---------+---------------------+ | Alice | Math,English,Science| | Bob | English,Math | | Charlie | Math | +---------+---------------------+ ``` 现在,我们想要将某个学生的课程字符串分离成多个课程,可以使用 `SUBSTRING_INDEX` 函数。该函数的语法为: ``` SUBSTRING_INDEX(str, delim, count) ``` 其,`str` 表示要分离的字符串,`delim` 表示分隔符,`count` 表示要返回的子字符串的数量。 例如,我们要将 Alice 所选的课程字符串分离成多个课程,可以使用如下的 SQL 语句: ``` SELECT SUBSTRING_INDEX(courses, ',', 1) AS course1, SUBSTRING_INDEX(SUBSTRING_INDEX(courses, ',', 2), ',', -1) AS course2, SUBSTRING_INDEX(SUBSTRING_INDEX(courses, ',', 3), ',', -1) AS course3 FROM ( SELECT name, GROUP_CONCAT(course SEPARATOR ',') AS courses FROM students GROUP BY name ) AS temp WHERE name = 'Alice'; ``` 执行结果如下: ``` +--------+---------+---------+ | course1| course2 | course3 | +--------+---------+---------+ | Math | English | Science | +--------+---------+---------+ ``` 需要注意的是,`SUBSTRING_INDEX` 函数只适用于分隔符数量确定的情况。如果分隔符数量不确定,或者存在空值,需要使用其他的字符串函数来处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值