Mysql посчитать разные идентификаторы внешнего ключа - PullRequest
0 голосов
/ 26 января 2019

У меня есть следующие таблицы:

рабочих мест:

-------------------------------------------------------
| id | title | slug | 
-------------------------------------------------------

рабочих мест:

-------------------------------------------------------
| id | job_type| 
-------------------------------------------------------

приложений:

-------------------------------------------------------
| id | job_opening_id| application_state_id| 
-------------------------------------------------------

application_states

-------------------------------------------------------
| id | name| 
-------------------------------------------------------

Я хочу создать запрос, который подсчитывает различные значения application_state_id

----------------------------------------------------------------------------
| j.title| j.slug| e.job_type | candidates | hired
----------------------------------------------------------------------------

Это запрос, который у меня есть в данный момент:

SELECT
  j.title,
  j.slug,
  e.job_type,
  count(a1.application_state_id) as candidates,
  count(a2.application_state_id) as hired
FROM
  jobs AS j
INNER JOIN employments AS e ON j.employment_id = e.id
LEFT JOIN applications AS a1 ON a1.job_opening_id = job_openings.id
LEFT JOIN application_states AS as ON as.id = a1.application_state_id
LEFT JOIN applications AS a2 ON a2.job_opening_id = j.id AND a2.application_state_id = 1
GROUP BY 
  a1.application_state_id,
  a2.application_state_id,
  j.id,
  j.title,
  j.slug

Я думалЯ мог бы создать 2 соединения и установить application_state_id, но все, что делает, это считает количество записей удвоенным.Что мне нужно изменить в этом запросе?Я надеюсь, что кто-то может мне помочь.

1 Ответ

0 голосов
/ 26 января 2019

Вы не предоставили пример данных, но, как я вижу из вашего кода
Вы присоединяетесь к столу applications дважды,
так, к 1-му, чтобы получить общее количество кандидатов
и 2-го числа, чтобы получить общее количество принятых кандидатов.
Я думаю, что вы можете отказаться от 2-го соединения и сделать условный подсчет, чтобы получить общее количество принятых кандидатов.
Также:
оператор выбора должен включать столбцы, по которым вы группируете, и все агрегированные столбцы.
и я не понимаю, почему вам нужно присоединиться к таблице application_states.
Попробуйте это:

SELECT
  j.title,
  j.slug,
  e.job_type,
  count(a.application_state_id) as candidates,
  sum(case when a.application_state_id = 1 then 1 else 0 end) as hired
FROM 
  jobs AS j INNER JOIN employments AS e ON j.employment_id = e.id
  LEFT JOIN applications AS a ON a.job_opening_id = job_openings.id
GROUP BY 
  j.title,
  j.slug,
  e.job_type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...