MySQL联合表SUM和extra子句

时间:2019-11-08 17:19:24

标签: mysql

我目前正在使用3个表,其中使用以下代码来获取获得挂起作业的用户数:

SELECT count(u.user_id) AS nb_users
FROM Users u
LEFT JOIN (
  SELECT sj.jobs_userid AS unfinished_user
  FROM Scheduled_Jobs sj
  LEFT JOIN Last_Update lu
    ON lu.update_jobsid = sj.jobs_id
  WHERE sj.status = 1
  AND sj.date <= CURDATE()
  AND lu.update_id IS NULL
) AS uj -- unfinished jobs
  ON u.user_id = uj.unfinished_user
WHERE u.status = 1
AND uj.unfinished_user IS NULL

这是一个表格示例:

Users (user_id | email | password | status)
1 | user@asd.com  | xxx | 1
2 | user2@asd.com | xxx | 1
3 | user3@asd.com | xxx | 2
4 | user4@asd.com | xxx | 1
5 | user3@asd.com | xxx | 1

Scheduled_Jobs (job_id | user_id | date | points | status)
1  | 1 | 05/09/2019 | 5 | 1
2  | 1 | 05/10/2019 | 3 | 1
3  | 1 | 05/11/2019 | 6 | 1
4  | 1 | 05/12/2019 | 2 | 1
5  | 2 | 07/10/2019 | 7 | 1
6  | 2 | 07/11/2019 | 5 | 1
7  | 2 | 07/12/2019 | 3 | 1
8  | 3 | 10/10/2019 | 4 | 2
9  | 4 | 13/10/2019 | 1 | 1
10 | 4 | 13/11/2019 | 6 | 1
11 | 5 | 15/10/2019 | 5 | 1
12 | 5 | 15/11/2019 | 4 | 1
13 | 5 | 15/12/2019 | 5 | 1

Last_Update (update_id | job_id | status)
1 | 1  | 1
2 | 2  | 1
3 | 3  | 1
4 | 5  | 1
5 | 8  | 1
6 | 9  | 1
7 | 11 | 1

我有2个问题似乎无法解决。我试图添加一个额外的where子句update_status = 1(似乎破坏了查询..),并且 我还试图显示上一份工作的总分,但我不确定如何实现。

因此,根据上面的示例,我们有4个具有计划作业的活动用户。结果将是(今天)这4个用户中的3个(由于用户2错过了Jobid 6,所以有1,4,5个)没有待处理的任务,它们的总分是12(6 + 1 + 5)。

1 个答案:

答案 0 :(得分:0)

在左连接子句中,应该使用AND

在相关的ON子句中添加与左连接表有关的条件。
  SELECT sj.jobs_userid AS unfinished_user
  FROM Scheduled_Jobs sj
  LEFT JOIN Last_Update lu
    ON lu.update_jobsid = sj.jobs_id
      AND lu.status =1 
  WHERE sj.status = 1
  AND sj.date <= CURDATE()
  AND lu.update_id IS NULL

如果为此使用where子句,则它将用作内部联接..