MYSQL特定日期所有员工的成本总和

MYSQL特定日期所有员工的成本总和,mysql,sum,Mysql,Sum,我正在尝试编写一个mysql查询,该查询将列出所有员工、他们的工作职能以及他们在某一天所做的所有工作的总成本。以下是我表格的相关部分: job_function table emp_func emp_num employee table emp_name emp_num job table job_date emp_num job_name job_type table cost job_name 该查询有效,只是它只返回在特定日期有工作的员工。如果员工当天没有工作,他们不会出现。我需

我正在尝试编写一个mysql查询,该查询将列出所有员工、他们的工作职能以及他们在某一天所做的所有工作的总成本。以下是我表格的相关部分:

job_function table
emp_func
emp_num


employee table
emp_name
emp_num

job table
job_date
emp_num
job_name

job_type table
cost
job_name
该查询有效,只是它只返回在特定日期有工作的员工。如果员工当天没有工作,他们不会出现。我需要显示所有员工,即使是那些当天没有工作的员工。有什么建议吗?我的问题是:

SELECT
employee.emp_name,
job_function,emp_func,
SUM(job_type.cost)
FROM
employee
INNER JOIN job ON job.emp_num = employee.emp_num
INNER JOIN job_function ON job_function.emp_num = employee.emp_num
INNER JOIN job_type ON job.job_name = job_type.job_name
where job_date = '2016-04-16'
group by emp_name;

如果您将
job\u date='2016-04-16'
放入,则只能看到当天工作的员工,您应该删除查看所有员工的位置,或者放置一个间隔,如
作业日期>'2016-04-16'和作业日期您需要一个
左联接
来获得结果,即使左联接表中没有符合
on
条件的行;在这种情况下,左联接表列中的值返回为
null

您还需要将
where
-条件移动到
on
-条件;您的
where
将要求
作业
-表中的日期为
2016-04-16
,因此它必须存在(且不为
null
),这将使
左联接
再次表现为
联接

SELECT 
  employee.emp_name,
  job_function.emp_func,
  SUM(job_type.cost)
FROM employee
JOIN job_function ON job_function.emp_num = employee.emp_num
left JOIN job ON job.emp_num = employee.emp_num and job.job_date = '2016-04-16'    
left JOIN job_type ON job.job_name = job_type.job_name
group by employee.emp_name, job_function.emp_func;

我还修复了您的
分组依据
,并在那里添加了
emp_func
-列,因为您选择了该列。否则将导致MySQL 5.7+中的默认设置出错,如果员工有多个功能,则可能会导致错误的结果。

您应该在此处找到答案。我还有什么需要改变的吗?还是只是加入?我认为这可能是一个加入的问题,但我尝试了其他一些,这并没有让我更接近
FULL OUTER JOIN
似乎对MYSQL也不起作用,至少在我使用它的方式上不起作用。这也有点让人困惑,因为我加入了4个表而不是2个表。对,但我需要日期。我意识到
where
条款不包括这些员工,但我需要弄清楚如何包括这些员工并保留日期。这和我所得到的一样接近。它应该显示所有员工及其当天工作的总成本。如果那天没有一个员工的工作,它应该显示一个0的总和,而不是不包括该员工。哇,我在想你的问题,因为10分钟没有找到解决方案,这有点困难Lol,很高兴不仅仅是我。也许我有解决方案,您应该包括所有不带“WHERE”的属性,但您应该在此处使用条件修改SUM(),这非常有用,谢谢。我没有想过在连接上使用