<!–
MySQL GROUP_CONCAT with Nulls
在使用GROUP_CONCAT()
聚合函数对某字段进行分组时,经常会遇到该字段存在NULL
值的情况,这时GROUP_CONCAT()
函数默认会忽略这些NULL
值。但有时候,我们需要将这些NULL
也一同处理。
下面是一个示例表students
:
id | name | gender | grade |
---|---|---|---|
1 | Alice | Female | A |
2 | Bob | Male | B |
3 | Cindy | Female | NULL |
4 | David | Male |
如果要按gender
分组,将name
进行合并,则可以用如下:
(adsbygoogle = window.adsbygoogle || []).push({});
SELECT gender, GROUP_CONCAT(name SEPARATOR ',')
FROM students
GROUP BY gender;
执行结果如下:
gender | GROUP_CONCAT(name SEPARATOR ‘,’) |
---|---|
Female | Alice,Cindy |
Male | Bob,David |
注意到Cindy
的grade
是NULL
,在聚合时被忽略了。
为了将NULL
值也纳入聚合,可以在使用GROUP_CONCAT()
函数时指定一个替代字符。比如,将NULL
替代为字符串"N/A"
,则SQL可以改为:
SELECT gender, GROUP_CONCAT(IFNULL(name, 'N/A') SEPARATOR ',')
FROM students
GROUP BY gender;
执行结果如下:
gender | GROUP_CONCAT(IFNULL(name, ‘N/A’) SEPARATOR ‘,’) |
---|---|
Female | Alice,N/A,Cindy |
Male | Bob,David |
注意到现在Cindy
也被纳入了聚合,而且内容显示为"N/A"
。
总之,当需要处理NULL
值时,可以利用IFNULL()
函数等方式将其替代为自定义字符串。
(adsbygoogle = window.adsbygoogle || []).push({});
阅读更多:
总结
在使用GROUP_CONCAT()
函数进行聚合时,存在NULL
值的情况需要特别注意。可以选择忽略这些NULL
值,或者将其替代为自定义字符串进行处理。