2012-01-19 59 views
4

我需要根據不同的標準在同一個查詢中得到兩個求和。兩個標準都在同一列上運行。 有沒有辦法做到這一點?兩個地方在一個查詢中

我可以用一個例子來說明這一點:

表: salary_survey_result

列: 行業, 位置, 位置, 工資

有效地我想結合以下兩個查詢:

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的工資是五位數工資。

+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

對不起沒有得到它是爲oracle ...其他dbms吃的形式... ... – rauschen