2013-03-20 76 views
4

我正在使用mysql数据库。我有一个表称为反馈,有一个字段howIsTraining 了五个值“太好了,非常好,好,可怜又可悲”Mysql:将整数值赋给字符串值并得到平均值

我想写这将给该平均查询可能有一个值从所有数据中以下格式

我想给整数值到每个值

优秀= 5 很好的值= 4 好= 3 普尔= 2 青衫= 1

如果说我有五个记录在表优良,非常好,优,良,差 这意味着((5 + 4 + 5 + 3 + 2)/ 5)= 3.8

最后它将给出结果为3.8

回答

4
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

但你应该真的想想更好的设计n(例如如杰克所示)

0

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

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

+0

它已经有了这些值..我想要那些格式本身的值... – maaz 2013-03-20 13:08:40

+1

一切都可以改变。 – Riho 2013-03-20 13:10:58

+0

但我希望这些值保持在这种格式本身..是不是可行(像我上面说的)在MySQL ...? – maaz 2013-03-20 13:12:00

1

假设你有一个保持得分另一个表:

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

然后,你将有一个查询像这样:

SELECT AVG(scores.value) 
FROM feedback 
INNER JOIN scores ON term = howIsTraining; 
+0

在单个表格中是不可能的......即没有另一个表格? – maaz 2013-03-20 13:14:06

+0

@maaz是的,你可以使用'CASE',但我认为你已经有一个单独的表;事实上,我会推荐它,以便您可以使用参考完整性:) – 2013-03-20 13:16:33