2014-07-09 9 views
0

I 다음 스키마가 : 내 데이터베이스에서그룹 쿼리 결과는이 형식을 얻을 수

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

, d는 null가 아닌 경우, 다음 C는 내가하고 싶은 무엇 0 그룹의 모든 열입니다을 그 는 a과 동일하고 b과 동일합니다. 그러나 결과의 경우 cd (존재하는 경우)의 null이 아닌 값의 합계를 사용하고 싶습니다. 예를 들어, 경우 내 데이터는이처럼 보였다 :

"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

당신은

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

같은 두 개의 행이있는 경우 하나 개의 필드

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

에 열 D의 값을 연결하는 GROUP_CONCAT를 사용하여이 그러나

"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" 

(즉, 널이 사라집니다 얻을 것이다. 그냥 max()를 사용

0

내가 이런 짓을 했을까) 자리 표시자를 유지해야하는 경우 병합 사용

select a, b, sum(c) as c, max(d) as d 
from table t 
group by a, b;