日期:2014-05-20  浏览次数:20403 次

求一统计分数的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 分数