标题:请教,精简的Sql代码。
只看楼主
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
结帖率:80%
已结贴  问题点数:20 回复次数:11 
请教,精简的Sql代码。
*---------------------------*
*构造测试数据
*每位评委分别给选手的唱歌、跳舞打分
*计算各选手的唱歌均分、跳舞均分
*---------------------------*


&&测试数据,是很多评委【示例15人】给许多选手【示例10人】进行唱歌、跳舞打分

Create Cursor Test(评委Id I,选手编号 C(7),选手姓名 C(20),唱歌 I,跳舞 I)
For j=1 To 15
    For I=1 To 10
        Insert Into Test(评委Id,选手编号,选手姓名,唱歌,跳舞) Values (j,'C'+Padl(I,3,'0'),'测试'+Padl(I,3,'0'),Int(Rand()*100),Int(Rand()*100))
    Endfor
Endfor



   100-100-100-99………………3-2-1   最高100 次最高100   最低分1 次最低分2
   100-99-99-99………………3-1-1     最高100 次最高99   最低分1 次最低分1


解释一:
1、用给定的测试数据,去掉每位选手 两个(最高分+次高分) 且  去掉每位选手 两个(最低分+次最低分)一共四条,也就是每位选手去掉这4个分数后,算出 评分类A、评分类B的均分。(这种去掉:比如100,100,99,19,19,……3,3, 1==只能删除100-100-3-1,注意第二个100相当于次最高,)【最高分可能与次高分相等】

2、用给定的测试数据,去掉每位选手 (最高分+次高分) 且  去掉每位选手 (最低分+次最低分),同分都要去掉。算出 评分类A、评分类B的均分。(这种去掉:比如 100-99-99-99………………2-2-1  ==  删除100-99 -2-1,这四种分全删除(可能不只四条记录)。【最高分可能与次高分相等】

3、结果列表

选手   姓名    唱歌均分   跳舞均分
C001  XXXX     XX.XXXX    XX.XXXX
C002  XXXX     XX.XXXX    XX.XXXX


谢谢。



[此贴子已经被作者于2019-1-11 18:03编辑过]

搜索更多相关主题的帖子: Sql 测试 数据 姓名 分类 
2019-01-11 09:09
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:4 
我的习惯是不一定要特意去追求代码精减,而是要兼顾程序的易读性和运行效率。我遇到楼主这个情况是分几步来完成,而不是追求精减。

活到老,学到老! http://www. E-mail:hu-jj@
2019-01-11 09:41
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
以下是引用hu9jj在2019-1-11 09:41:19的发言:

我的习惯是不一定要特意去追求代码精减,而是要兼顾程序的易读性和运行效率。我遇到楼主这个情况是分几步来完成,而不是追求精减。


谢谢回复。
2019-01-11 10:41
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:4 
sele * from 表 orde by 分 desc into table temp
sele temp
zrs =recc()
sele * from temp where recn()>2 and recn()<=zrs-2 into table 结果 &&& 得到的结果是去掉了最好的2个和最差的2个

只求每天有一丁点儿的进步就可以了
2019-01-11 13:16
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:4 
看不明白需求,下图这个人,问题一和二,各要去掉哪4个?
2019-01-11 13:22
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:4 
回复 5楼 csyx
4楼正解,谢谢!
稍作改进,但未做验证,不知是否符合你的要求?
VFP 9.0:
    sele avg(评分类a) as pjf from (sele * from _test orde by 评分类a desc) tt where recn()>2 and recn()<=recc()-2
2019-01-11 14:10
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
回复 4-5-6楼

谢谢回复。是最后要算出每位选手的均分。不是这所有人的均分。
我给了一个示例。
对问题又重新解释了一下。

100-100-100-99………………3-2-1   最高100 次最高100   最低分1 次最低分2

100-99-99-99………………3-1-1   最高100 次最高99   最低分1 次最低分1

[此贴子已经被作者于2019-1-11 15:19编辑过]

2019-01-11 14:42
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
需求仍不明确
评分有A和B两类,对每个选手来说,你要去掉的4个评分,是指A/B类一共4个,还是A/B类各去掉4个

[此贴子已经被作者于2019-1-11 16:47编辑过]

2019-01-11 16:45
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
[quote]以下是引用csyx在2019-1-11 16:45:21的发言:

需求仍不明确


谢谢回复。
见顶楼




[此贴子已经被作者于2019-1-11 20:19编辑过]

2019-01-11 17:15
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
说不明白,对每个选手来说,最后一共是去掉了4个还是8个评分?

A/B合在一起比较最高最低分,就是每位选手,最后去掉4个评分
A/B分开,就是评分A去掉4个,评分B也去掉4个,最后一共要去掉8个
不知说明白没有
2019-01-11 17:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492628-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.102121 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved