我正在使用mysql数据库。我有一个名为反馈的表,其中有一个字段howIsTraining ,它可能有五个值中的一个值“优秀、非常好、好、差和可悲”
我想编写查询,它将以下列格式从所有数据中给出该值的平均值
我想给每个值一个整数值
优秀 = 5 非常好 = 4 好 = 3 差 = 2 可怜 = 1
如果说我在表Excellent,Very Good,Excellent,Good,Poor中有五条记录,这意味着((5 + 4 + 5 + 3 + 2)/ 5)= 3.8
最后它会给出3.8的结果
我正在使用mysql数据库。我有一个名为反馈的表,其中有一个字段howIsTraining ,它可能有五个值中的一个值“优秀、非常好、好、差和可悲”
我想编写查询,它将以下列格式从所有数据中给出该值的平均值
我想给每个值一个整数值
优秀 = 5 非常好 = 4 好 = 3 差 = 2 可怜 = 1
如果说我在表Excellent,Very Good,Excellent,Good,Poor中有五条记录,这意味着((5 + 4 + 5 + 3 + 2)/ 5)= 3.8
最后它会给出3.8的结果
select avg(case howIsTraining
when 'Excellent' then 5
when 'Very Good' then 4
when 'Good' then 3
when 'Poor' then 2
when 'Pathetic' then 1
else null
end) as avg_rating
from feedback
SQLFiddle:http ://sqlfiddle.com/#!2/14a06/1
但是你真的应该考虑一个更好的设计(例如 Jack 所示)
假设您有另一个保存分数的表:
scores
----------+------
term | value
----------+------
Excellent | 5
Very Good | 4
...
然后你会有这样的查询:
SELECT AVG(scores.value)
FROM feedback
INNER JOIN scores ON term = howIsTraining;
在数据库中使用值从 1 到 5 的整数列不是更有意义。然后在表示数据时将数字转换为字符串?
在极端情况下,添加额外的整数列并通过 UPDATE... SETgrade=1 填充正确的等级值,其中 hoIsTraing='Pathetic'。