我正在尝试重复我在mysql中对excel所做的事情。
平均多列并获得此计算的最高/最大值。
以下是我在excel中制定的数据 -
橙色值优于平均功能,绿色优于最大功能。
我使用以下SQL在MYSQL中获得相同的结果。
SELECT AVG(HOUR_8 + HOUR_9 + HOUR_10 + HOUR_11 + HOUR_12 + HOUR_13 + HOUR_14
+ HOUR_15 + HOUR_16)/9 AS AVERAGE_HOUR
FROM HOURS
但输出的最佳平均值是现在,如果我在mysql中执行相同的等式,则最佳平均值为 13.51851852
我曾尝试将sql与MAX结合使用,但它根本不允许你这样做。
有没有其他方法可以正确重复我在MYSQL中的excel中所做的事情?
答案 0 :(得分:2)
您不需要AVG()
功能。这是一个聚合函数,所有值都在一行中。
相反,您可以算术计算该值。然后,您可以使用ORDER BY
和LIMIT
,或只使用MAX()
来获取值:
select t.*,
((hour_8 + hour_9 + hour_10 + hour_11 + hour_12 + hour_13 + hour_14 + hour_15 + hour_16)/9) as avg_hour
from t
order by avg_hour desc
limit 1;
这将给出行中的所有其他值。如果你只想要最大平均值:
select max((hour_8 + hour_9 + hour_10 + hour_11 + hour_12 + hour_13 + hour_14 + hour_15 + hour_16)/9) as max_avg_hour
from t;
答案 1 :(得分:0)
我猜你在那里使用了AVG
函数错误,因为它获得了列AVG。你应该使用这样的东西:
SELECT (HOUR_8 + HOUR_9 + HOUR_10 + HOUR_11 +
HOUR_12 + HOUR_13 + HOUR_14 + HOUR_15 +
HOUR_16) / 9 AS AVG_HOUR FROM HOURS
这会为您提供一个包含每行小时平均值的列。
现在你应该使用mySQL的MAX()
函数来选择它们的最大值。
SELECT MAX(AVG_HOUR) FROM
(
SELECT (HOUR_8 + HOUR_9 + HOUR_10 + HOUR_11 +
HOUR_12 + HOUR_13 + HOUR_14 + HOUR_15 +
HOUR_16)/9 AS AVERAGE_HOUR FROM HOURS
)