读书人

一个SQL查询语句求教解决方案

发布时间: 2012-01-15 22:57:48 作者: rapoo

一个SQL查询语句求教
名 分数
A 7
B 3
A 2
C 5
A 4
C 2
B 7
C 6
这样的一个表。,我想算每个人分数最高的两个分的和,应该怎么做呢?


[解决办法]
我想算每个人分数最高的两个分的和
---------
是意思
[解决办法]
select f_num2,sum(point) from(
select name,max(point) as point from a group by name
union all
select name, max(point) as point from a where point not in (select max(point) from a group by name ) group by name ) a group by name
[解决办法]
好象是

--如果相同名的分不重
Select 名, SUM(分数) As 分数 From 表 A
Where 分数 In (Select TOP 2 分数 From 表 Where 名 = A.名) Group By 名
[解决办法]
举例如下:
create table a(名 varchar(20),分数 int)
insert a values( 'A ',7)
insert a values( 'B ',3)
insert a values( 'A ',2)
insert a values( 'C ',5)
insert a values( 'A ',4)
insert a values( 'C ',2)
insert a values( 'B ',7)
insert a values( 'C ',6)
go
select 名,sum(分数) 分数
from a b
where (select count(*) from a where 名=b.名 and 分数> =b.分数) <=2
group by 名
order by 名,分数 desc
go
返回:
名 分数
-------------------- -----------
A 11
B 10
C 11

(所影响的行数为 3 行)
[解决办法]
create table # (
name varchar(10),
score int)

insert #


select 'A ', 7
union all
select 'B ', 3
union all
select 'A ', 2
union all
select 'C ', 5
union all
select 'A ', 4
union all
select 'C ', 2
union all
select 'B ', 7
union all
select 'C ', 6
union all
select 'B ',6
union all
select 'A ',1
union all
select 'B ',1
union all
select 'C ',1
union all
select 'A ',7

select name,sum(score) from #
where (select count(*) from # t where t.name = #.name and t.score > = #.score) <= 2
group by name

drop table #
----------------------------
结果
A14
B13
C11
----------------------------
原来
A7
B3
A2
C5
A4
C2
B7
C6
B6
A1
B1
C1
A7

读书人网 >SQL Server

热点推荐