MySQL:在多对多表中计算实例

MySQL:在多对多表中计算实例,mysql,Mysql,我正在创建一个小型招聘网站,我想知道这在MySQL中是否可行:我有3个示例工作,我想显示所有申请工作的用户,他们的应用程序状态为'pending',同时显示其他'pending'和'pending'+'hired'应用程序的总数每个用户都有一个 我一直在想办法解决这个问题,但我遇到了一些问题。这是MySQL可以做到的吗 users +----+-------+ | ID | name | +----+-------+ | 1 | hanna | | 2 | bob | | 3 |

我正在创建一个小型招聘网站,我想知道这在MySQL中是否可行:我有3个示例工作,我想显示所有申请
工作的用户,他们的应用程序状态为
'pending'
,同时显示其他
'pending'
'pending'+'hired'
应用程序的总数每个用户都有一个

我一直在想办法解决这个问题,但我遇到了一些问题。这是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 |
+--------+---------+-----------+---------------+--------------------+

下面的查询接近您建议的输出。请注意,将单个
作业\u id
与给定用户关联是没有意义的,因为一个用户可能有多个作业。同样,将一个
状态
与给定的用户关联也没有意义,因为每个记录表示多个状态的聚合

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

下面的查询接近您建议的输出。请注意,将单个
作业\u id
与给定用户关联是没有意义的,因为一个用户可能有多个作业。同样,将一个
状态
与给定的用户关联也没有意义,因为每个记录表示多个状态的聚合

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

嗯,我将最后一部分修改为
按状态为'pending'且作业id为1的用户进行分组,这得到了我期望的数据。但是,您能否确认这是否正确,或者我在未来的特定情况下是否会遇到问题?@enchance如果您添加了这样一个
HAVING
条款,那么您将无法计算被雇用的用户数。这就是你想要的吗?嗯,我将最后一部分修改为
GROUP BY user_id,status='pending'和job_id=1,这得到了我期望的数据。但是,您能否确认这是否正确,或者我在未来的特定情况下是否会遇到问题?@enchance如果您添加了这样一个
HAVING
条款,那么您将无法计算被雇用的用户数。这是你想要的吗?