4

我正在使用mysql数据库。我有一个名为反馈的表,其中有一个字段howIsTraining ,它可能有五个值中的一个值“优秀、非常好、好、差和可悲”

我想编写查询,它将以下列格式从所有数据中给出该值的平均值

我想给每个值一个整数值

优秀 = 5 非常好 = 4 好 = 3 差 = 2 可怜 = 1

如果说我在表Excellent,Very Good,Excellent,Good,Poor中有五条记录,这意味着((5 + 4 + 5 + 3 + 2)/ 5)= 3.8

最后它会给出3.8的结果

4

3 回答 3

5
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 所示)

于 2013-03-20T13:13:54.097 回答
1

假设您有另一个保存分数的表:

scores
----------+------
term      | value
----------+------
Excellent | 5
Very Good | 4
...

然后你会有这样的查询:

SELECT AVG(scores.value)
FROM feedback
INNER JOIN scores ON term = howIsTraining;
于 2013-03-20T13:10:57.240 回答
0

在数据库中使用值从 1 到 5 的整数列不是更有意义。然后在表示数据时将数字转换为字符串?

在极端情况下,添加额外的整数列并通过 UPDATE... SETgrade=1 填充正确的等级值,其中 hoIsTraing='Pathetic'。

于 2013-03-20T13:07:02.230 回答