胜负比率计算问题?如何用SQL语句实现?(存储过程也可以) 表一
姓名编号 合计积分
1009 9
1001 8
1002 8
1003 6
1004 6
1005 6
… 5
… 4
… 4
积分一样的可能有多个人,不同积分一样的可能有多个组. 比赛规则是,积分同的,就找到积分相同的人计算他们之间的比率.
如上表,1001与1002积分相同,那就在下表中找出1001与1002的所有记录.
并求出1001与1002的各自胜局总和进行相比.
表二 姓名编号1 胜局数 姓名编号2 胜局数
1003 2 1001 1 1001与1003就是2:1
1001 1 1005 2
1002 3 1005 2
1005 1 1004 2
1004 2 1005 3
1001 0 1002 2
1003 1 1004 2
1002 3 1001 2
1003 2 1005 1
… … … …姓名编号 合计积分 胜负比率
1009 9
1001 8 2/5=0.4
1002 8 5/2=2.5
1003 6
1004 6 ?
1005 6 ?
所以排名1002应在1001前面
最后结果显示的表如下:
姓名编号 合计积分 胜负比率
1009 9
1002 8 2.5
1001 8 0.4
1003 6 ?
1004 6 ?
1005 6 ?
合计积分相同的,按胜负比率排序.
[email protected]
姓名编号 合计积分
1009 9
1001 8
1002 8
1003 6
1004 6
1005 6
… 5
… 4
… 4
积分一样的可能有多个人,不同积分一样的可能有多个组. 比赛规则是,积分同的,就找到积分相同的人计算他们之间的比率.
如上表,1001与1002积分相同,那就在下表中找出1001与1002的所有记录.
并求出1001与1002的各自胜局总和进行相比.
表二 姓名编号1 胜局数 姓名编号2 胜局数
1003 2 1001 1 1001与1003就是2:1
1001 1 1005 2
1002 3 1005 2
1005 1 1004 2
1004 2 1005 3
1001 0 1002 2
1003 1 1004 2
1002 3 1001 2
1003 2 1005 1
… … … …姓名编号 合计积分 胜负比率
1009 9
1001 8 2/5=0.4
1002 8 5/2=2.5
1003 6
1004 6 ?
1005 6 ?
所以排名1002应在1001前面
最后结果显示的表如下:
姓名编号 合计积分 胜负比率
1009 9
1002 8 2.5
1001 8 0.4
1003 6 ?
1004 6 ?
1005 6 ?
合计积分相同的,按胜负比率排序.
[email protected]
from table1 a inner join
(Select 姓名编号1,sum(Flag) as 胜局 from
(Select姓名编号1,胜局数1,(case when 胜局数1>胜局数2 then 1
else 0 end) as Flag from table2 ) T
group by 姓名编号1) b
on a.姓名编号=b.姓名编号1
inner join
(Select 姓名编号2,sum(Flag) as 负局 from
(Select姓名编号1,胜局数1,(case when 胜局数1>胜局数2 then 1
else 0 end) as Flag from table2 ) T
group by 姓名编号2 ) c
a.姓名编号=c.姓名编号2
order by 合计积分 desc ,胜局/负局
(姓名编号 int,合计积分 int)
create table 表二
(姓名编号1 int,胜局数1 int,
姓名编号2 int,胜局数2 int)
insert into 表一 select 1009,9
insert into 表一 select 1001,8
insert into 表一 select 1002,8
insert into 表一 select 1003,6
insert into 表一 select 1004,6
insert into 表一 select 1005,6insert into 表二 select 1003,2,1001,1
insert into 表二 select 1001,1,1005,2
insert into 表二 select 1002,3,1005,2
insert into 表二 select 1005,1,1004,2
insert into 表二 select 1004,2,1005,3
insert into 表二 select 1001,0,1002,2
insert into 表二 select 1003,1,1004,2
insert into 表二 select 1002,3,1001,2
insert into 表二 select 1003,2,1005,1select a.姓名编号,a.合计积分,b.WF_Rate as 胜负比率
from 表一 as a left join
(select 姓名编号1,sum(winCount)*1.0/sum(failCount) as WF_Rate
from
(select 姓名编号1,sum(胜局数1) as winCount,sum(胜局数2) as failCount
from 表二
group by 姓名编号1
union all
select 姓名编号2,sum(胜局数2),sum(胜局数1)
from 表二
group by 姓名编号2) as temp_table
group by 姓名编号1) as b
on a.姓名编号=b.姓名编号1
order by 合计积分 desc,胜负比率 desc