谁能讲一下以下的每行代码的意思(100分)

  • 主题发起人 主题发起人 coolcat3000
  • 开始时间 开始时间
C

coolcat3000

Unregistered / Unconfirmed
GUEST, unregistred user!
select 参赛单位,tmp,(select count(参赛单位)
from (select 参赛单位,sum(最终得分) as tmp
from sporter
group by 参赛单位
order by sum(最终得分) desc) BBB
where tmp>AAA.tmp)+1
from
(select 参赛单位,sum(最终得分) as tmp
from sporter where 届数=:届数

group by 参赛单位
order by sum(最终得分) desc) AAA
 
好家伙,眼睛都花了,不知是谁写的。

真的能运行吗?

总的功能大概就是找出指定“届数”的“参赛单位”和“得分总和”以及“所有大于该参赛单位得分总和的单位数+1”。
说明:
select 参赛单位,tmp,(select count(参赛单位) -- 参赛单位,得分总和AAA.tmp,参赛单位总数+1
from -- 从BBB表中统计参赛单位总和
(select 参赛单位,sum(最终得分) as tmp -- 参赛单位,得分总和BBB.tmp
from sporter
group by 参赛单位 -- 按参赛单位统计
order by sum(最终得分) desc) BBB -- 按得分总和降序输出,并命名为BBB的别名
where tmp>AAA.tmp)+1 -- BBB的得分总和大于AAA统计的得分总和
from -- 从AAA表中查找
(select 参赛单位,sum(最终得分) as tmp -- 参赛单位,得分总和AAA.tmp
from sporter where 届数=:届数 -- 指定届数
group by 参赛单位 -- 按参赛单位统计
order by sum(最终得分) desc) AAA -- 按得分总和降序输出,并命名为AAA的别名
 
次查询的目的是取得制定“届数”的“参赛单位”、“总得分”、以及按“总得分”从多到少的“排名”。
实际应该这样看:
select 参赛单位,tmp, -- AAA.参赛单位, AAA.tmp
(select count(参赛单位) -- BBB.Count 即“排名”
from (select 参赛单位,sum(最终得分) as tmp -- 计算BBB中的“总得分”
from sporter -- [red]缺少 where 届数=:届数 造成于AAA中不一致,得不到正确的结果[/red]
group by 参赛单位 -- 保持与AAA中的排序一致
order by sum(最终得分) desc) BBB
where tmp>AAA.tmp)+1 -- BBB中的“总得分”>AAA中的“总得分”个数+1
from
(select 参赛单位,sum(最终得分) as tmp -- 计算BBB中的“总得分”
from sporter where 届数=:届数
group by 参赛单位
order by sum(最终得分) desc) AAA

其它解释就不用了吧?!

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
843
import
I
I
回复
0
查看
775
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部