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

时间:2017-02-02 20:31:19

标签: 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

查询有效,只是它只返回那个特定日期有工作的员工。如果一名员工当天没有工作,他们就不会出现。我需要展示所有员工,即使那些那天没有工作的员工。有关如何做到这一点的任何建议?这是我的疑问:

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;

2 个答案:

答案 0 :(得分:0)

如果您放置job_date = '2016-04-16',您只能看到当天工作的员工,则应删除WHERE以查看所有员工或设置job_date>'2016-04-16' AND job_date<'2016-05-31'

之间的间隔

答案 1 :(得分:0)

即使左连接表中没有符合left join条件的行,您也需要on才能获得结果;在这种情况下,左连接表的列中的值将返回为null

您还需要将where - 条件移至on条件;否则,您的where会要求job - 表中的日期为2016-04-16,因此必须存在(而不是null),这会使left join 1}}再次表现得像join

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;

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