Mysql 将查询结果分组以获取此格式
我有以下模式:Mysql 将查询结果分组以获取此格式,mysql,sql,Mysql,Sql,我有以下模式: a VARCHAR(255), b INTEGER, c INTEGER, d TEXT 在我的数据库中,如果d不是null,那么c是0。我想做的是对所有具有相等as和相等bs的列进行分组。但是,我想使用c的和作为结果,使用d的非空值(如果有)。例如,如果我的数据如下所示: "XXX" 100 1 NULL "XXX" 100 1 "my text" "YYY" 5 1 NULL "YYY" 7 0 "other text" 我希望结果是: "XXX" 100 2 "my t
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"
我是否可以使用一个查询来实现这一点 您可以使用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"
(即,空值将消失。如果需要维护占位符,请使用coalesce)我只需使用
max()
:
select a, b, sum(c) as c, max(d) as d
from table t
group by a, b;