Два WHERE & COUNT в одном запросе - PullRequest
4 голосов
/ 20 января 2012

Мне нужно получить две суммы в одном запросе на основе разных критериев. Оба критерия работают с одним и тем же столбцом. Есть ли способ сделать это?

Я могу лучше всего объяснить это на примере:

Таблица: 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

Ответы [ 2 ]

8 голосов
/ 20 января 2012

Что-то вроде

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 голосов
/ 20 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...