【问题标题】:Find the average salary several months back - MySQL查找几个月前的平均工资 - MySQL
【发布时间】:2013-02-01 20:07:06
【问题描述】:

我想求8个月前开始工作的员工的平均工资。

我尝试编写代码,但不知何故它显示为 NULL..

SELECT AVG(salary) FROM Staff  
WHERE salary = DATE_SUB(sWDate, INTERVAL 8 MONTH);

所有内容都在此表中。

谁能帮帮我?我不确定我做错了什么。谢谢。

【问题讨论】:

  • 以上SQL有效,如果要在这里平均员工工资,Group By不是必需的
  • 你为什么要比较薪水和日期?您的加入日期是哪一栏?
  • 我的错误。我认为工资等于 8 个月前的日期。

标签: mysql date average


【解决方案1】:

为什么是salary = DATE_SUB(sWDate, INTERVAL 8 MONTH)

8 个月内:

SELECT AVG(salary) FROM Staff  
WHERE sWDate <= NOW() AND sWDate >= DATE_SUB(Now(), INTERVAL 8 MONTH);

另一个:

SELECT AVG(salary) FROM Staff  
WHERE sWDate <= NOW() AND sWDate >= DATE_ADD(Now(), INTERVAL -8 MONTH);

PS:最好根据sWDate 中的日期格式来格式化Now() 以获得精确的结果。否则你可以使用Year/Month

例如:

SELECT AVG(salary) FROM Staff  
WHERE Date_Format(sWDate,'%Y-%m') <= Date_Format(NOW(),'%Y-%m') 
AND Date_Format(sWDate,'%Y-%m') >= Date_Format(DATE_ADD(Now(), INTERVAL -8 MONTH), '%Y-%m';

【讨论】:

  • 感谢它的工作原理(第一个和第二个 1,没有尝试过 3)。 1 个问题怎么来 ' SELECT AVG(salary) FROM Staff WHERE sWDate= DATE_SUB(sWDate, INTERVAL 8 MONTH); '不工作?
  • 我的愚蠢错误!我忘了把减号放在 8 之前...再次感谢您!
  • 请尝试评论。让我们知道一切是否适合您。 :)
  • 它成功了,谢谢 bonCodigo =) 我必须将薪水更改为迄今为止,并将 date_sub 中的日期与 NOW() 交换,并在月份 (8) 旁边放置一个减号。
【解决方案2】:

我认为您应该检查 Date 字段而不是日期的薪水

SELECT AVG(salary) FROM Staff  
WHERE [DateField] = DATE_SUB(NOW(), INTERVAL 8 MONTH);

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2019-03-24
    • 1970-01-01
    • 2021-06-02
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多