2014-07-09 3 views
0

У меня есть следующая схема:Group результат запроса, чтобы получить этот формат

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

В моей базе данных, если d не равно нулю, то с равно 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" 

Есть запрос, я могу использовать, что будет делать это?

ответ

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" 

(т.е. нуль исчезнет. Используйте сливаться, если вам необходимо поддерживать заполнитель)

0

Я хотел бы сделать это только с помощью max():

select a, b, sum(c) as c, max(d) as d 
from table t 
group by a, b; 
Смежные вопросы