求一统计分数的sql语句!
表格如下:
id 发表人 标题 栏目
1 a aaa A
2 b bbb A
3 b fff B
4 c sss B
5 a hhh C
发表人在栏目A发表的时候加3分,栏目B加2分,栏目C加1分。
最后想算出发表人发表文章得到的总分,按照由高到低的顺序排列下来。如下面这样的结果
b 5分
a 4分
c 2分
这样的 sql语句应该怎么写啊!
------解决方案--------------------select 发表人,sum(case 栏目 when a then 3 else case 栏目 when b then 2 else 1 end end ) as 分数
from 表 group by 发表人 order by 分数
------解决方案--------------------楼主还是预先把没行的分数记录吧
加一列 "分数 "
即
id 发表人 标题 栏目 分数
1 a aaa A 3
2 b bbb A 3
3 b fff B 2
4 c sss B 2
5 a hhh C 1
不然取得时候计算太不划算
最后用 Group 配合 Sum 实现
即:
SELECT 发表人, SUM(分数) AS Score FROM 表
GROUP BY 发表人
ORDER BY Score DESC
------解决方案--------------------declare @a table(id int,sender varchar(20),title varchar(20),item varchar(20))
insert into @a select '1 ', 'a ', 'aaa ', 'A '
union all select '2 ', 'b ', 'bbb ', 'A '
union all select '3 ', 'b ', 'fff ', 'B '
union all select '4 ', 'c ', 'sss ', 'B '
union all select '5 ', 'a ', 'hhh ', 'C '
select sender '发表人 ',sum(case when item= 'A ' then 3 when item= 'B ' then 2
when item= 'C ' then 1 end) '分数 ' from @a group by sender order by '分数 ' desc
(5 行受影响)
发表人 分数
-------------------- -----------
b 5
a 4
c 2
(3 行受影响)
------解决方案--------------------select 发表人, sum(decode(栏目, 'A ',3, 'B ',2, 'C ',1,0)) 分数 from 表 group by 发表人 order by 分数