如果任何值为NULL,GROUP_CONCAT将返回NULL

时间:2012-08-23 23:03:14

标签: mysql group-by group-concat

如果任何列为GROUPT_CONCAT,如何NULL返回NULL

这是一个测试表:

CREATE TABLE gc (
  a INT(11) NOT NULL,
  b VARCHAR(1) DEFAULT NULL
);

INSERT INTO gc (a, b) VALUES
(1, 'a'),
(1, 'b'),
(2, 'c'),
(2, NULL),
(3, 'e');

我的疑问:

SELECT a, GROUP_CONCAT(b)
FROM gc
GROUP BY a;

这就是我得到的:

a | GROUP_CONCAT(b)
--+----------------
1 | a,b
2 | c
3 | e

这就是我想要的:

a | GROUP_CONCAT(b)
--+----------------
1 | a,b
2 | NULL
3 | e

1 个答案:

答案 0 :(得分:5)

IF表达式中检查组中的任何值是否为NULL。我可以想到几种方法:

1)计算非空值并将其与组中的行数进行比较:

SELECT a, IF(COUNT(b) = COUNT(*), GROUP_CONCAT(b), NULL) AS bs
FROM gc
GROUP BY a

查看在线工作:sqlfiddle

2)使用SUM计算空值的数量:

SELECT a, IF(SUM(b IS NULL) = 0, GROUP_CONCAT(b), NULL) AS bs
FROM gc
GROUP BY a

查看在线工作:sqlfiddle