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

标签 mysql

我正在创建一个小型招聘网站,想知道这在 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/

相关文章:

mysql - Mysql 中 count() 的不等式

mysql - 如何在 Kubernetes 中传递 .sql 文件?

php - 更新mysql php中的数据

mysql - 通过计算批量更新 mysql 特定列

mysql - 我一定要使用 SUM() 进行条件聚合吗?

python - mysql-python 安装错误 : Cannot open include file 'config-win.h'

php - 相似搜索和语义搜索

php - 在 MAMP 中连接到 MySQL

php - PayPal IPN 记录但未插入 MySQL

mysql - 将数据插入通过连接表连接的 2 个表中