我想要最大平均值及其按月分组的 id,
Select FK_Transporter,Month, MAX(avg_rate) as BTPercent
FROM (
SELECT kpi.FK_Transporter ,kpi.`Month`, AVG(kpi.OnTimeDelivery) as avg_rate
FROM primarykpi as kpi,transporter as t
WHERE kpi.FK_Transporter=t.Id and YEAR(kpi.`Month`)=2016
GROUP BY FK_Transporter, MONTH(kpi.Month)) tp
GROUP BY tp.`Month`
这个查询给了我正确的平均值,但 id 不正确。找不到错误。这是此查询的输出
FK_Transporter Month MaxAvg
1 2016-01-01 2.270109534263611
1 2016-02-01 0.8539329767227173
1 2016-03-01 0.6764709949493408
FK_transporter 在所有错误的记录中都是 1。我怎样才能解决这个问题。谢谢。
这是一个 fiddle 链接 http://sqlfiddle.com/#!9/02d7c/1/0
最佳答案
问题是你在外部查询中只按月分组,所以 mysql 几乎选择它在扫描内部子查询的结果时遇到的第一个 fk_transporter 值。在外部查询中,您需要获取每月的最大平均值并将其加入内部子查询以获取结果:
SELECT t2.fk_transporter, t.month, t.btpercent
FROM
(Select `Month`, MAX(avg_rate) as BTPercent
FROM (
SELECT kpi.FK_Transporter ,kpi.`Month`, AVG(kpi.OnTimeDelivery) as avg_rate
FROM primarykpi as kpi,transporter as t
WHERE kpi.FK_Transporter=t.Id and YEAR(kpi.`Month`)=2016
GROUP BY FK_Transporter, MONTH(kpi.Month)) tp
GROUP BY tp.`Month`) t
INNER JOIN
(
SELECT kpi.FK_Transporter ,kpi.`Month`, AVG(kpi.OnTimeDelivery) as avg_rate
FROM primarykpi as kpi,transporter as t
WHERE kpi.FK_Transporter=t.Id and YEAR(kpi.`Month`)=2016
GROUP BY FK_Transporter, MONTH(kpi.Month)) t2
ON t2.Month=t.month and t2.avg_rate=t.btpercent
关于mysql - 如何获取最大平均值及其按月分组的 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982160/