2016-11-28 10 views
1

Я создаю небольшой сайт для трудоустройства и задаюсь вопросом, возможно ли это в MySQL: у меня есть 3 образца рабочих мест, и я хочу показать всем пользователям, которые обратились к job_id = 1, которые имеют статус приложения 'pending', показывая общее количество других 'pending' и 'pending' + 'hired' приложений, которые есть у каждого пользователя.MySQL: подсчет экземпляров во многих таблицах

Я пытался обнять голову, но у меня проблемы. Это что-то может сделать MySQL?

users 
+----+-------+ 
| ID | name | 
+----+-------+ 
| 1 | hanna | 
| 2 | bob | 
| 3 | rick | 
+----+-------+ 

job 
+--------+------------+ 
| job_id | jobname | 
+--------+------------+ 
|  1 | 'waiter'| 
|  2 | 'janitor'| 
|  3 |  'cook'| 
+--------+------------+ 

applications 
+----------+---------+-----------+ 
| user_id | job_id | status | 
+----------+---------+-----------+ 
|  1 |  1 | 'pending' | 
|  1 |  2 | 'pending' | 
|  1 |  3 | ' hired' | 
|  2 |  1 | 'pending' | 
|  3 |  1 | 'removed' | 
+----------+---------+-----------+ 

Мой набор результатов

+--------+---------+-----------+---------------+--------------------+ 
| job_id | user_id | status | count_pending | count_pendinghired | 
+--------+---------+-----------+---------------+--------------------+ 
|  1 |  1 | 'pending' |    2 |     3 | 
|  1 |  2 | 'pending' |    1 |     1 | 
+--------+---------+-----------+---------------+--------------------+ 

ответ

0

Следующий запрос приходит близко к выходу предложил. Обратите внимание, что нет смысла связывать один job_id с данным пользователем, поскольку пользователь может иметь несколько заданий. Аналогичным образом, также не имеет смысла связывать один status с данным пользователем, поскольку каждая запись представляет собой совокупность более чем одного состояния.

SELECT user_id, 
     SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS count_pending, 
     SUM(CASE WHEN status = 'pending' OR status = 'hired' 
        THEN 1 ELSE 0 END) AS count_pendinghired 
FROM applications 
GROUP BY user_id 
+0

Хммм, я изменил последнюю часть на 'GROUP BY user_id HAVING status = 'pending' AND job_id = 1', который получил данные, которые я ожидал. Но можете ли вы подтвердить, что это правильно, или я буду сталкиваться с проблемами для конкретных случаев в будущем? – enchance

+0

@enchance Если вы добавите такой пункт 'HAVING', то вы не сможете подсчитать тех пользователей, которые были наняты. Это то, что вы хотите? –

+0

Это странно, это на самом деле все еще работает на моем конце ... – enchance