将查询结果分组以获取此格式

时间:2014-07-09 00:02:31

标签: mysql sql

我有以下架构:

a VARCHAR(255),
b INTEGER,
c INTEGER,
d TEXT

在我的数据库中,如果d不为null,则c为0.我想要做的是对所有具有相等a s且等于b s的列进行分组。但是,我希望将c的总和用于d的非空值(如果有的话)。例如,如果我的数据如下所示:

"XXX" 100 1 NULL
"XXX" 100 1 "my text"
"YYY" 5 1 NULL
"YYY" 7 0 "other text"

我希望结果是:

"XXX" 100 2 "my text"
"YYY" 5 1 NULL
"YYY" 7 0 "other text"

我可以使用的查询会执行此操作吗?

2 个答案:

答案 0 :(得分:1)

您可以使用group_concat将列d的值连接到一个字段

SELECT a, b, SUM(c), GROUP_CONCAT(d)
FROM table
GROUP BY a, b
ORDER BY a asc, b asc

如果您有两行,例如

"XXX", 100, 0, "Some Text"
"XXX", 100, 0, "Some More Text"

这将返回

"XXX", 100, 0, "Some Text,Some More Text"

但是如果你有三行:

"XXX", 100, 0, "Some Text"
"XXX", 100, 0, "Some More Text"
"XXX", 100, 1, NULL

你会得到

"XXX", 100, 1, "Some Text,Some More Text"

(即,null将消失。如果需要维护占位符,请使用coalesce)

答案 1 :(得分:0)

我只会使用max()

来执行此操作
select a, b, sum(c) as c, max(d) as d
from table t
group by a, b;