Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将查询结果分组以获取此格式_Mysql_Sql - Fatal编程技术网

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;