如何在MySQL销售前获得员工的平均销售额?

时间:2014-10-13 12:39:17

标签: mysql sql database datetime

假设我有一个包含3列的表:EMPLOYEE_ID, NUM_SALES, DATE。这只是员工表,显示每日销售额。对于表中的每一行,我尝试计算这个;除当日之外的最后K天内该EMPLOYEE_ID的平均销售数量。

如何在MySQL中查询?我尝试使用EMPLOYEE_ID和DATE进行分组,但我无法弄清楚如何找到每行的最后K个销售额。

2 个答案:

答案 0 :(得分:1)

要选择天数间隔,您可以使用MySQL的DATE_SUB()功能:

WHERE `date` >= DATE_SUB(NOW(), INTERVAL 3 DAY)

这将选择过去3天内的所有记录。但是,要排除"今天"从那个:

WHERE `date` BETWEEN
     DATE_SUB(NOW(), INTERVAL 3 DAY)
     AND DATE_SUB(NOW(), INTERVAL 1 DAY)

之后,您应该能够GROUP BY employee_id获得您之后的信息:

SELECT
    employee_id, avg(num_sales) AS avg_num_sales
FROM
    employee_table
WHERE `date` BETWEEN
     DATE_SUB(NOW(), INTERVAL 3 DAY)
     AND DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY
    employee_id

答案 1 :(得分:1)

您需要能够从表格中选择项目,按日期称之为dailysale

这是你做的。

SELECT employee_id, AVG(num_sales) AS avg_sales
  FROM dailysale
 WHERE date >= CURDATE() - INTERVAL 3 DAY
   AND date < CURDATE()
 GROUP BY employee_id

这使用两个WHERE子句来缩小你正在使用的日期范围。 date >= CURDATE() - INTERVAL 3 DAY排除了三天前午夜之前的所有记录,date < CURDATE()排除了今天午夜或之后的所有记录。

您需要使用CURDATE()而不是NOW(),因为NOW()包含日期和当前时间。 date < NOW()将包含今天的销售额,因为您的date列仅记录日期而非记录日期。

如果您想按销售顺序列出员工,可以添加

 ORDER BY AVG(num_sales) DESC, employee_id

查询。