因此,我试图找出员工从被录用到获得加薪所需的平均时间。
我已经尝试了一些东西,但我做对了。
这是我的数据库的样子: https://dev.mysql.com/doc/employee/en/sakila-structure.html
这是我试过的:
SELECT AVG(SUM(datediff(hire_date, min((SELECT from_date FROM salaries
WHERE from_date > hire_date AND
(SELECT salary FROM salaries
WHERE from_date = hire_date) <
(SELECT salary FROM salaries
WHERE from_date > hire_date))))))
FROM employees;
任何帮助将不胜感激,从逻辑上讲这应该是正确的(也许不是),我可能只是搞砸了语法......
谢谢!
最佳答案
这不是一个简单的查询,但您可能会在类(class)中尝试自己找到它,并在此过程中学习很多 SQL。
在实际的系统开发情况下,如果 SQL 变得太重或太复杂,有时程序员更容易做更多的查询,使用存储过程或用编程语言解决它。
但是,作为帮助,我相信这会成功:
select avg(md) from (
select emp_no, min(days) as md from
(select s1.emp_no as emp_no,
s1.from_date as start,
datediff(s2.from_date,s1.from_date) as days
from employees e inner join salaries s1 on
e.emp_no=s1.emp_no
inner join salaries s2 on s1.emp_no=s2.emp_no
where
s2.from_date <> s1.from_date and
s1.from_date < s2.from_date and
s1.from_date = e.hire_date
) t ) tt group by emp_no
想法是首先进行昂贵的 JOIN 以查找日期的所有差异(从 s2s2 - 从 s1)但仅当 date_from 等于 hire_date 并且日期不相等时。 (差异=0)。
第二个内部选择得到每个员工的最小值,这肯定是第一次晋升。
外部选择进行平均。
关于mysql - 日期差异之和的平均值.. MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35784441/