2

의 N 행 세트 돌려하여 그룹에 포스트 그레스 9.3.2, 나는 req_timecustomer_id에 의해 req_status 그룹화의 수를 얻을 각 customer_id에 대한 N 행 집합을 반환하려면 사용하여, req_status 카운트가 0 일 때도 마찬가지입니다.방법 B와 b

req_time  req_id customer_id  req_status 
----------------------------------------------- 
2014-03-19 100  1   'FAILED' 
2014-03-19 102  1   'FAILED' 
2014-03-19 105  1   'OK' 
2014-03-19 106  2   'FAILED' 
2014-03-20 107  1   'OK' 
2014-03-20 108  2   'FAILED' 
2014-03-20 109  2   'OK' 
2014-03-20 110  1   'OK' 

출력

req_time customer_id req_status count 
------------------------------------------- 
2014-03-19 1   'FAILED' 2 
2014-03-19 1   'OK'  1 
2014-03-19 2   'FAILED' 1 
2014-03-19 2   'OK'  0 
2014-03-20 1   'FAILED' 0 
2014-03-20 1   'OK'  2 
2014-03-20 2   'FAILED' 1 
2014-03-20 2   'OK'  1 

내가 어떻게 이것을 달성 할 수 있습니까?

답변

1

또한 결과에서 누락 된 행을 보려면 가능한 행의 전체 격자에 왼쪽으로 결합하십시오. 그리드는 십자가와 (req_time, customer_id, req_status)의 가능한 모든 조합에서 구축 조인 : 일치하는 항목이없는 경우 0이됩니다 실제 테이블에서 열에

SELECT d.req_time, c.customer_id, s.req_status, count(t.req_time) AS ct 
FROM (
    SELECT generate_series (min(req_time), max(req_time), '1 day')::date 
    FROM tbl 
    ) d(req_time) 
CROSS JOIN (SELECT DISTINCT customer_id FROM tbl) c(customer_id) 
CROSS JOIN (VALUES ('FAILED'::text), ('OK'))  s(req_status) 
LEFT JOIN tbl t USING (req_time, customer_id, req_status) 
GROUP BY 1,2,3 
ORDER BY 1,2,3; 

카운트가 (NULL 값이 포함되지 않습니다).

req_timedate (timestamp이 아님)으로 가정합니다. 여기

유사 답 :
array_agg group by and null

+0

감사 어윈. 검색어가 count = 0 인 행을 제외합니다. 출력을 원하는 방식으로 다시보십시오. – McKibet

+0

@McKibet : 알겠습니다. 내 대답이 업데이트되었습니다. –

+0

이 작동합니다. 귀하의 통찰력에 대해 대단히 감사드립니다. – McKibet

1

SQL Fiddle

select 
    s.req_time, s.customer_id, 
    s.req_status, 
    count(t.req_status is not null or null) as "count" 
from 
    t 
    right join (
     (
      select distinct customer_id, req_time 
      from t 
     ) q 
     cross join 
     (values ('FAILED'), ('OK')) s(req_status) 
    ) s on 
     t.req_status = s.req_status and 
     t.customer_id = s.customer_id and 
     t.req_time = s.req_time 
group by 1, 2, 3 
order by 1, 2, 3 
+0

Clodoaldo, 고마워. 이것은 완벽하게 작동합니다. – McKibet

관련 문제