2012-01-19 18 views
4

異なる条件に基づいて同じクエリで2つの集計を取得する必要があります。どちらの基準も同じ列で動作します。 これを行う方法はありますか?1つのクエリで2つのWHERE&COUNT

私は最良の例でこれを説明することができます:

表: salary_survey_result

列: 業界、 場所、 位置、 給与

効果的に私がしたいです次の2つのクエリを組み合わせてください:

SELECT industry, location, count(*) as MORE_THAN_SIX_FIGURE 
FROM salary_survey_result 
WHERE salary > 100000 
GROUP BY industry, location 

SELECT industry, location, count(*) as MORE_THAN_FIVE_FIGURE 
FROM salary_survey_result 
WHERE salary > 10000 
GROUP BY industry, location 

だから、結果はこのようなものです:
industry location MORE_THAN_FIVE_FIGURE MORE_THAN_SIX_FIGURE


Healthcare NY    45      10 
Healthcare MN    35      6 
InfoTech  NY    50      19 
InfoTech  MN    40      12 

答えて

8

ような何か
SELECT industry, 
     location, 
     sum(case when salary >= 10000 then 1 else 0 end) as MORE_THAN_FIVE_FIGURE, 
     sum(case when salary >= 100000 then 1 else 0 end) as MORE_THAN_SIX_FIGURE 
    FROM salary_survey_result 
    WHERE salary >= 10000 
    GROUP BY industry, location 

結果のためにWHERE salary >= 10000句は必要ありません。 SALARYにインデックスがあり、ほとんどの給与値が10000未満の場合は、パフォーマンスが向上する可能性があります。>ではなく、>=を意味することに注意してください。10,000の給与は5フィギュアの給与です。

+0

+1 '合計(給与> = 10000、次に1 else 0)> 0' –

+0

個人的には、このような合計を 'count(給与> 100000、それ以外は1ヌルエンド)'に変更し、結果が何かのカウントであることを明確にしました。 –

+0

素晴らしい!完璧に動作します。 – OceanBlue

-2
SELECT industry, location, count(*) as MORE_THAN_FIVE_FIGURE ,sum(salary > 100000) as MORE_THAN_SIX_FIGURE 
FROM salary_survey_result 
WHERE salary > 10000 
GROUP BY industry, location 
+1

'sum(salary> 100000)'は有効な構文ではありません。 –

+0

これを使用してエラーが発生します。 – OceanBlue

+0

申し訳ありませんが、それはそれがオラクルのためになった...他のdbmsはSQLの形を食べています... – rauschen

関連する問題