我们假设表中有一个名为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查询实现此目的?
答案 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