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

Posted

技术标签:

【中文标题】如果任何值为 NULL,GROUP_CONCAT 返回 NULL【英文标题】:GROUP_CONCAT return NULL if any value is NULL 【发布时间】:2012-08-19 12:48:02 【问题描述】:

如果任何一列是NULL,我怎样才能让GROUPT_CONCAT 返回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】:

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

【讨论】:

很酷,谢谢 :) 我感觉这在大型数据集上会表现得非常糟糕。 刚看到你的更新,你知道哪个会更好吗? @Petah:我必须测量一下才能确定。猜测第二个可能会快一点,但我怀疑两者都会有合理的性能。昂贵的部分可能是GROUP_CONCAT

以上是关于如果任何值为 NULL,GROUP_CONCAT 返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章

Mysql concat() group_concat()用法

浅析MySQL中concat以及group_concat的使用

浅析MySQL中concat以及group_concat的使用

MySQL教程之concat以及group_concat的用法

MySQL中concat以及group_concat的使用

如果值为 GROUP_CONCAT 行