2013-06-16 2 views
0

에 함께이 개 값은 우리가 우리는 1,2,3 및 4있는 4 개 개의 다른 레코드 유형이그룹 2와 MySQL

1: 50 
2: 100 
3: 150 
4: 200 

쿼리

SELECT recordType,SUM(amount) FROM records GROUP BY recordType 

출력이 있다고 할 수 있습니다. 위 쿼리는이 4 가지 유형으로 그룹화 된 값을 반환합니다. 페어링 된 그룹화를 기반으로 그룹화를 표시하도록 쿼리를 조정할 수 있습니까? recordType 1과 recordType 2의 결과를 한 행에, 세 번째와 네 번째 행의 결과를 반환합니다. 2 행째

예상 출력

Group 1: 150 
Group 2: 350 

답변

1

부분이 제대로 그룹화, 다른 부분은 그룹의 이름을 점점하고있다.

당신이 정말로 문제의 번호가있는 경우, 당신은 할 수 있습니다 :

select concat('Group ', @rn := @rn + 1), count(*) 
from records r cross join (select @rn := 0) const 
group by (case when type in (1, 2) then 1 
       when type in (3, 4) then 2 
      end) 
:

select concat('Group ', cast((recordType - 1)/2 as int)), count(*) 
from records r 
group by cast((recordType - 1)/2 as int) 

를 값이 실제로 그렇게 산술적 의무가없는 경우는, 다음 변수는 아마도 가장 간단한 방법입니다

2

등 RECORDTYPE 1 행에 하나 RECORDTYPE (2)의 결과를 반환하고, 3 및 4.

사례 문을 사용하여이를 수행 할 수 있습니다. 잘 수행되지 않지만 작동 할 것입니다. 실제 값에 따라 최종 쿼리는 다음과 같은 것을 볼 수 있었다 : 문제의

group by case 
     when type in(1, 2) then 1 
     when type in(3, 4) then 2 
     when ... 
     else ... 
     end