SQL Server:为字符分配值并获取每个用户的平均值

时间:2015-12-03 08:50:48

标签: jquery sql sql-server sql-server-2008

我们假设表中有一个名为class_nr的字段,class_nr的样本值为E,U,R,O,P,S。

+---------+-------------+
| user_id | class_nr    |
+---------+-------------+
| 1       | E           |
| 1       | O           |
| 1       | E           |
| 2       | P           |
| 2       | R           |
| 2       | U           |
+---------+-------------+

课程要点:

E=5
U=4
R=3
O=2
P=1

现在我想计算用户class_nr的平均点数。例如,user_id 1有2 E s和1 O。所以他有平均分:

(5+2+5)/3 = 4

同样user_id 2获得:

(1+3+4)/3 = 2.67

如何在SQL Server中使用单个SQL查询实现此目的?

2 个答案:

答案 0 :(得分:4)

执行GROUP BY,使用CASE表达式为每个class_nr提供正确的数值:

select user_id, SUM(case class_nr when 'E' then 5.0
                                  when 'U' then 4.0
                                  when 'R' then 3.0
                                  when 'O' then 2.0
                                  when 'P' then 1.0 end) / count(*)
from tablename
group by user_id

答案 1 :(得分:0)

您可以直接使用平均功能而不是总和和计数:

CREATE TABLE #temp (
    user_id INT
    ,class_nr CHAR(1)
    )

    INSERT INTO #temp
    VALUES (
    1
    ,'E'
    )
    ,(
    1
    ,'O'
    )
    ,(
    1
    ,'E'
    )
    ,(
    2
    ,'P'
    )
    ,(
    2
    ,'R'
    )
    ,(
    2
    ,'U'
    )



    select user_id,avg(case when class_nr = 'E' then 5.0
    when class_nr = 'O' then 2.0
    when class_nr = 'P' then 1.0
    when class_nr = 'R' then 3.0
    when class_nr = 'u' then 4.0

     end) from #temp group by user_id