2011-08-04 3 views
2

2 개의 숫자를 가져 오려고합니다. 하나는 하루에 관계없이 얼마나 많은 의사 (dr 테이블)가 10 개 이상의 답변 (응답 테이블)을 갖고 총 75 개의 답변을 합계 한 것입니까? 다른 번호는 동일한 것이지만 1 개월 대신 지난 3 개월 이내입니다.다른 카운트 값을 카운트하지만 충분히 높은 경우에만

나는이 쿼리 마련 아래 this answer 대답을 사용 :

SELECT D.name, 
    count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 1 MONTH) then A.id end) as '1 month', 
    count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 3 MONTH) then A.id end) as '1 quarter', 
    count(DISTINCT A.id) as total 
FROM dr D 
JOIN answer A ON A.dr_id=D.id AND A.status=3 
GROUP BY D.id 

이 나에게 내가 필요로하는 원시 정보를 제공하지만, 나는 10에 비교하여 주어진 수를 계산하는 방법을 모른다 및 75 답변 요구 사항.

답변

0

뭔가, 내 생각 :

SELECT 
    COUNT(CASE WHEN total >= 75 AND `1month` > 10 THEN name END) AS `10+ per month count`, 
    COUNT(CASE WHEN total >= 75 AND `1quarter` > 10 THEN name END) AS `10+ per quarter count` 
FROM (
    SELECT D.name, 
    count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 1 MONTH) then A.id end) as `1month`, 
    count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 3 MONTH) then A.id end) as `1quarter`, 
    count(DISTINCT A.id) as total 
    FROM dr D 
    JOIN answer A ON A.dr_id=D.id AND A.status=3 
    GROUP BY D.id 
) s 
+0

굉장 감사합니다! 이것은 서브 테이블에서 '1 개월'과 '1 쿼터'의 공백을 제거하는 것 이외의 방식으로 완벽하게 작동했습니다. –

+0

당신이 옳습니다. 내 솔루션에서도이를 수정했습니다. –

0

이 검색어를 사용하여 재생해야 할 수도 있지만 원하는 것을 제공해야합니다. 기본적으로 쿼리를 가져 와서 파생 테이블로 사용하고 그룹별로 /를 사용하여 추가로 요약합니다. 이 같은

;with DrCounts as (
    SELECT D.id, 
     count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 1 MONTH) then A.id end) as '1month', 
     count(DISTINCT case when A.created > DATE_SUB(NOW(), INTERVAL 3 MONTH) then A.id end) as '1quarter', 
     count(DISTINCT A.id) as total 
    FROM dr D 
    JOIN answer A ON A.dr_id=D.id AND A.status=3 
    GROUP BY D.id) 

select count(distinct D.id) as Dr1075 
from DrCounts D 
group by D.Id 
having D.total >= 75 and D.1month >= 10 
union 
select count(distinct D.id) as Dr1075 
from DrCounts D 
group by D.Id 
having D.total >= 75 and D.1quarter >= 10 
관련 문제