2011-08-04 3 views
2

2つの数値を取り込もうとしています。一つは、1ヶ月以内に回答した医師(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

このクエリを使用して再生する必要があるかもしれませんが、探しているものが表示されます。基本的には、クエリを取りだし、それを派生テーブルとして使用し、by/byを使用してさらに集計します。

;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 
関連する問題