我正在尝试选择过去 30 天每天的平均完成次数,然后取平均值。这是我的 Rundown 表的示例
RundownID | WorkOrderID | ForemanID | Completion | RundownDate
1 | 1 | 1 | 1 | 2017-10-27
2 | 2 | 1 | 1 | 2017-10-26
3 | 3 | 1 | 1 | 2017-10-20
4 | 4 | 1 | 1 | 2017-10-27
5 | 5 | 2 | 1 | 2017-10-27
6 | 6 | 2 | 1 | 2017-10-27
7 | 7 | 3 | 1 | 2017-10-25
8 | 8 | 2 | 0 | 2017-10-20
我要找的结果是
ForemanID | ForemanAvg
1 | 4
2 | 2
3 | 1
它应该获取过去 30 天内完成行的总数,并对每个唯一的 ForemanID 每天的总数进行平均。然后平均每天的总数给我最近 30 天的平均值
我知道我很接近,但我似乎无法正确配置它。这是我走了多远
SELECT
ForemanID,
COUNT(RundownDate) AS ForemanAvg
FROM Rundown
WHERE RundownDate > (DATE_SUB(CURDATE(), INTERVAL '30' Day))
AND Completion = 1
GROUP BY ForemanID
结果
ForemanID | ForemanAvg
23 | 70
24 | 100
25 | 100
26 | 76
27 | 109
29 | 11
编辑:
我越来越近了。使用以下查询我得到了我想要的结果,但是由于某种原因它只给了我一个 ForemanID
SELECT
a.ForemanID,
AVG(a.ForemanAvg)
FROM (SELECT
RundownDate,
ForemanID,
COUNT(RundownDate) AS ForemanAvg
FROM Rundown
WHERE RundownDate > (DATE_SUB(CURDATE(), INTERVAL '30' Day))
AND Completion = 1
GROUP BY ForemanID, RundownDate ) AS a
最佳答案
以下查询应该有效:
SELECT
ForemanID,
count(*)/COUNT(distinct RundownDate) AS ForemanAvg
FROM Rundown
WHERE RundownDate > (DATE_SUB(CURDATE(), INTERVAL '30' Day))
AND Completion = 1
GROUP BY ForemanID;
希望对您有所帮助!
关于MYSQL COUNT 结果并在按列分组时对它们进行 AVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46980547/