我想计算MySQL表中一堆行的平均等级。问题是,根据您登录的用户,可能会使用不同的比例。
示例比例可以是:
在数字刻度中,数字越大越好,但在字母尺度上越低越好。
如何创建SQL查询以提供正确的平均值?
平均值示例:
我使用的查询是:
SELECT CHAR(ROUND(AVG(ORD(UPPER(grade))))) AS average
这里的问题是最后一个例子。使用该查询后出现E
,但这不是有效等级,应为D
。
我不知道如何处理这件事。如果规模排除了值(例如A-F等级不包括E),那么获得MySQL平均等级的最佳方法是什么?如果需要,我可以在PHP中计算它。
答案 0 :(得分:1)
使用字母和值之间的映射创建另一个表,连接一次以获取当前字母的值,然后再次连接它以将平均值转换回字母。
答案 1 :(得分:1)
如果不进行看起来像spaghetti的SQL查询,最好的方法是创建一个带有grade->等级点值的映射表。
如
Table Values
grade value
A | 4
B | 3
C | 2
etc.
然后,你会做平均值
SELECT ROUND(AVG(v.value)) FROM Grades g
INNER JOIN Values v on g.grade = v.grade
然后,您可以加入表格以获得结果
SELECT * FROM (
SELECT ROUND(AVG(grade)) avg FROM Grades g
INNER JOIN Values v on g.value = v.value
) avgs
INNER JOIN Values v2 on avgs.avg = v2.values