我正在创建一个小型招聘网站,想知道这在 MySQL 中是否可行:我有 3 个示例工作,我想显示所有申请了 job_id = 1
的用户,他们有一个应用程序'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 |
+--------+---------+-----------+---------------+--------------------+
最佳答案
以下查询接近您建议的输出。请注意,将单个 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
关于MySQL:计算多对多表中的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843823/