我有以下架构:
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"
我可以使用的查询会执行此操作吗?
答案 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;