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

标签 mysql group-by group-concat

如果任何列为 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

最佳答案

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

关于mysql - 如果任何值为 NULL,GROUP_CONCAT 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101191/

相关文章:

mysql - react js mysql : TypeError: Cannot read property 'affectedRows'

即使在索引后 MySQL 加入速度也很慢

mysql - 两个不同表上的 group_concat 在第二个表上给出重复结果

MYSQL GROUP_CONCAT 包括 NULL

mysql - 在表上运行查询时 group_concat 被切断

php - 通过 phpmyadmin Arduino 到 MySQL

sql - 必须出现在 GROUP BY 子句中或在聚合函数中使用

sql - 获取最大值(值)而不在 SQL Server 中分组

mysql - 按字段中的子字符串分组

mysql - 在 Laravel 4 迁移中添加 MySQL 地理空间点列