标题:请教,精简的Sql代码。
取消只看楼主
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
结帖率:80%
已结贴  问题点数:20 回复次数:5 
请教,精简的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
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
以下是引用hu9jj在2019-1-11 09:41:19的发言:

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


谢谢回复。
2019-01-11 10:41
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
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
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
回复 10楼 csyx
是、号,打错了
2019-01-11 17:37
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
以下是引用csyx在2019-1-11 17:32:24的发言:

说不明白,对每个选手来说,最后一共是去掉了4个还是8个评分?

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


、打成了/号,
说白了,比如,算位选手的A均分时,肯定是按要求去掉类型A4个,算b时
肯定是去掉类型B4个。肯定不会是8个。

当然啦,用vfp代码循环肯定可以。我需要的是sql精简代码。谢谢一直提醒。

2019-01-11 17:43



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




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

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