Запрос количества SQL с указанием регистра - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно выполнить запрос из трех таблиц avg_salary, person и email. Этот простой SQL-запрос работает нормально.

SELECT avg_salary.id, COUNT(emails.message_from) AS email_PGA
FROM avg_salary, person, emails
WHERE person.works_in = avg_salary.id    
AND person.email_address = emails.message_from
AND person.salary::numeric > avg_salary.avg
GROUP BY avg_salary.id

Но я хочу добавить еще один столбец email_PLA с условием, когда person.salary::numeric < avg_salary.avg. Я могу сделать это, снова присоединившись ко всему запросу. Но я хочу использовать CASE в этой ситуации. И даже после стольких попыток я не могу понять правильный синтаксис.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Я полагаю, вам нужен еще один счет? Вам нужно что-то вроде:

SUM(CASE WHEN (person.salary::numeric < avg_salary.avg) THEN 1 ELSE 0 END) AS email_PGA
0 голосов
/ 10 мая 2018

Вы можете выполнить условное агрегирование с использованием регистра expression и всегда использовать явный синтаксис JOIN

SELECT avg_salary.id, 
       SUM(CASE WHEN p.salary::numeric > asal.avg THEN 1 ELSE 0 END) AS email_PGA,
       SUM(CASE WHEN p.salary::numeric < asal.avg THEN 1 ELSE 0 END) AS email_PLA
FROM avg_salary asal, 
INNER JOIN person  p on p.works_in = asal.id
INNER JOIN emails e on e.message_from = p.email_address  
--WHERE p.salary::numeric > asal.avg
GROUP BY avg_salary.id;
0 голосов
/ 10 мая 2018

Если вам нужны разные столбцы в определенных условиях, вам нужно выполнять разные SQL-запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...