php - 在 MySQL 中使用不同比例计算平均成绩

标签 php mysql average

我想计算 MySQL 表中一堆行的平均等级。问题是,根据您登录的用户身份,可能会使用不同的比例。

比例尺示例可以是:

  • 1-5
  • 1-10
  • A-F(显然不包括 E)

在数字范围内,数字越大越好,但在字母范围内,数字越低越好。

如何进行 SQL 查询才能给出正确的平均值?

平均值示例:

  • 5, 5, 4, 2 = 4
  • 8、10、7、6、4 = 7
  • A,A,C = B
  • A、F、B、B = C
  • F、F、B、D = D

我使用的查询是:

SELECT CHAR(ROUND(AVG(ORD(UPPER(grade))))) AS average

这里的问题是最后一个例子。使用该查询得出的结果是 E,但这不是有效的成绩,它应该是 D

我不知道如何处理这个问题。如果等级已排除值(例如 A-F 等级不包括 E),在 MySQL 中获得平均成绩的最佳方法是什么?如果需要的话,我可以用PHP计算它。

最佳答案

在不进行看起来像意大利面条的 SQL 查询的情况下,最好的方法是创建一个包含年级->成绩点值的映射表。

比如

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

关于php - 在 MySQL 中使用不同比例计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981068/

相关文章:

javascript - 仅自动提交表单一次

mysql JOIN - 左连接、右连接还是外连接?

mysql - 在一列中找出时间范围

php - 限制循环在 php 中运行的次数

php - 如何将 HTML 页面视为 PHP 页面?

mysql - 用户排名查询

python - 使用 MySQLdb 执行 "SELECT ... WHERE ... IN ..."

mysql - 连接 SELECT AVG 和 UPDATE

matlab - 按列平均每 N 行

php - 需要错误,但文件存在