문제

일부 데이터를 요약하기 위해 쿼리를 작성하고 있습니다. 테이블에 기본적으로 부울 인 깃발이 있으므로 하나의 값을 기준으로 합계와 계산이 필요합니다.

select
   location
  ,count(*)
  ,sum(duration)
from my.table
where type = 'X'
  and location = @location
  and date(some_tstamp) = @date
group by location

그런 다음 유형 열의 다른 값에 대해 동일합니다. 이 테이블에 두 번 가입하면 어떻게 그룹화되어 있으므로 각 테이블에 대해 집계를 얻을 수 있습니다 (즉).*) count 대신 (*) ...

두 개의 개별 쿼리를 작성하는 것이 더 낫습니까?

편집하다

모두 감사합니다. 그러나 그것은 내가 의미하는 것이 아닙니다. 유형 = 'x'와 유형 = 'y'가 개별적으로 요약 된 요약을 얻어야합니다 ... 더 나은 예를 게시하겠습니다. 내가 의미하는 바는 다음과 같은 쿼리였습니다.

select
   a.location
  ,count(a.*)
  ,sum(a.duration)
  ,count(b.*)
  ,sum(b.duration)
from my.table a, my.table b
where a.type = 'X'
  and a.location = @location
  and date(a.some_tstamp) = @date
  and b.location = @location
  and date(b.some_tstamp) = @date
  and b.type = 'Y'
group by a.location

무엇을 그룹화해야합니까? 또한 DB2는 카운트를 좋아하지 않습니다 (a.*), 구문 오류입니다.

도움이 되었습니까?

해결책


select
   location
  ,Sum(case when type = 'X' then 1 else 0 end) as xCount
  ,Sum(case when type = 'Y' then 1 else 0 end) as YCount
  ,Sum(case when type = 'X' then duration else 0 end) as xCountDuration
  ,Sum(case when type = 'Y' then duration else 0 end) as YCountDuration
from my.table
where 
location = @location
  and date(some_tstamp) = @date
group by location

이것은 SQL Server에서 작동해야합니다. DB2가 비슷한 것을 가져야한다고 생각합니다.

편집 : "type"이 x와 y 이외의 값을 가질 수있는 경우 레코드를 유형 = x 또는 유형 = y로 제한하는 where 조건을 추가하십시오.

다른 팁

가입과의 예제는 의미가 없습니다. 당신은 A와 B 사이에 데카르트 제품을하고 있습니다. 이것이 정말로 당신이 원하는 것입니까?

다음은 where 절을 만족시키는 각 쌍에 대해 count (*) 및 sum (duration)을 찾을 수 있습니다. 설명을 바탕으로, 이것은 당신이 찾고있는 것과 같습니다.

select
   type
  ,location
  ,count(*)
  ,sum(duration)
from my.table
where type IN ('X', 'Y')
  and location = @location
  and date(some_tstamp) = @date
group by type, location

카운트를 카운트 (a.*) 대신에 카운트로 작동시키기 위해 (A.location) 또는 다른 널없는 열 (PK는 이상적입니다).

주요 질문에 관해서는 위의 Shahkalpesh 또는 George Eadon이 제공 한 답변 중 하나가 효과가 있습니다. 이 예제에는 테이블에 두 번 합류 할 이유가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top