- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个应用程序,用于计算橄榄球比赛(2015 年橄榄球世界杯,但它可以应用于许多其他基于泳池的比赛)的团队排名。
在分组阶段结束时,根据胜/平/负/红利积分计算积分,并按积分对队伍进行排名。 如果两支或两支以上的球队积分相同,则以两支并列球队交手的胜者为准。一旦初始排名完成,其他标准(分差) , tries difference, points scored, tries scored) 用于完成排名过程。
我已经编写了一个查询来执行上述所有操作,除了第一个排名标准 - 两支球队的积分水平应根据两支球队参加比赛的获胜者进行排序。
这是我的数据库架构:
[TEAM] [MATCH]
-TeamId -MatchId
-TeamName -HomeTeamId
-Pool -AwayTeamId
-HomeTeamScore
-HomeTeamTries
-AwayTeamScore
-AwayTeamTries
这是我用来计算给定池的排名的 SQL Server 查询:
WITH PoolResults ([MatchId], [TeamId], [Team], [P], [W], [D], [L], [PF], [PA], [PD], [TF], [TA], [TD], [PTS], [BP])
AS (SELECT
M.[MatchId],
M.[HomeTeamId] AS [TeamId],
HT.[TeamName],
1 AS [P],
CASE WHEN M.[HomeTeamScore] > M.[AwayTeamScore] THEN 1 ELSE 0 END AS [W],
CASE WHEN M.[HomeTeamScore] = M.[AwayTeamScore] THEN 1 ELSE 0 END AS [D],
CASE WHEN M.[HomeTeamScore] < M.[AwayTeamScore] THEN 1 ELSE 0 END AS [L],
M.[HomeTeamScore] AS [PF],
M.[AwayTeamScore] AS [PA],
(M.[HomeTeamScore] - M.[AwayTeamScore]) AS [PD],
M.[HomeTeamTries] AS [TF],
M.[AwayTeamTries] AS [TA],
(M.[HomeTeamTries] - M.[AwayTeamTries]) AS [TD],
CASE
WHEN M.[HomeTeamScore] > M.[AwayTeamScore] THEN 4
WHEN M.[HomeTeamScore] = M.[AwayTeamScore] THEN 2
WHEN M.[HomeTeamScore] < M.[AwayTeamScore] THEN 0
END AS [PTS],
CASE
WHEN ((M.[AwayTeamScore] - M.[HomeTeamScore]) BETWEEN 1 AND 7) AND M.[HomeTeamTries] >= 4 THEN 2
WHEN ((M.[AwayTeamScore] - M.[HomeTeamScore]) BETWEEN 1 AND 7) THEN 1
WHEN M.[HomeTeamTries] >= 4 THEN 1
ELSE 0
END AS [BP]
FROM
Match AS M
INNER JOIN Team AS HT
ON M.[HomeTeamId] = HT.[TeamId]
WHERE
M.[HomeTeamScore] IS NOT NULL
AND HT.[Pool] = @Pool
UNION
SELECT
M.[MatchId],
M.[AwayTeamId] AS [TeamId],
AT.[TeamName],
1 AS [P],
CASE WHEN M.[AwayTeamScore] > M.[HomeTeamScore] THEN 1 ELSE 0 END AS [W],
CASE WHEN M.[AwayTeamScore] = M.[HomeTeamScore] THEN 1 ELSE 0 END AS [D],
CASE WHEN M.[AwayTeamScore] < M.[HomeTeamScore] THEN 1 ELSE 0 END AS [L],
M.[AwayTeamScore] AS [PF],
M.[HomeTeamScore] AS [PA],
(M.[AwayTeamScore] - M.[HomeTeamScore]) AS [PD],
M.[AwayTeamTries] AS [TF],
M.[HomeTeamTries] AS [TA],
(M.[AwayTeamTries] - M.[HomeTeamTries]) AS [TD],
CASE
WHEN M.[AwayTeamScore] > M.[HomeTeamScore] THEN 4
WHEN M.[AwayTeamScore] = M.[HomeTeamScore] THEN 2
WHEN M.[AwayTeamScore] < M.[HomeTeamScore] THEN 0
END AS [PTS],
CASE
WHEN ((M.[HomeTeamScore] - M.[AwayTeamScore]) BETWEEN 1 AND 7) AND M.[AwayTeamTries] >= 4 THEN 2
WHEN ((M.[HomeTeamScore] - M.[AwayTeamScore]) BETWEEN 1 AND 7) THEN 1
WHEN M.[AwayTeamTries] >= 4 THEN 1
ELSE 0
END AS [BP]
FROM
Match AS M
INNER JOIN Team AS AT
ON M.[AwayTeamId] = AT.[TeamId]
WHERE
M.[AwayTeamScore] IS NOT NULL
AND AT.[Pool] = @Pool
)
SELECT ROW_NUMBER()
OVER (ORDER BY
SUM([BP] + [PTS]) DESC,
SUM([PD]) DESC,
SUM([TD]) DESC,
SUM([PF]) DESC,
SUM([TF]) DESC) AS [Position],
[TeamId],
[TeamName],
SUM([P]) AS [P],
SUM([W]) AS [W],
SUM([D]) AS [D],
SUM([L]) AS [L],
SUM([PF]) AS [PF],
SUM([PA]) AS [PA],
SUM([PD]) AS [PD],
SUM([TF]) AS [TF],
SUM([TA]) AS [TA],
SUM([BP]) AS [BP],
SUM([BP] + [PTS]) AS [PTS]
FROM
PoolResults
GROUP BY
[TeamId],
[TeamName];
如前所述,除了考虑两支球队在相同分数上的排名(基于谁赢得了他们之间的比赛)之外,这一切都会发生。 有人对如何进行初始排名有建议吗?
===== 更新原帖 =====
澄清 - 可以有超过 2 支队伍获得相同的分数,在这种情况下,必须对 2 支队伍的每个组合进行评估以确定排名。 SqlFiddle 上的以下示例说明了一个池中有 5 个团队的场景,其中 3 个团队具有相同的点数 - http://sqlfiddle.com/#!6/c0701/3
查询 #1 显示原始比赛数据(哪些球队参加比赛和比分)
查询 #2 显示未排序的池排名:
Australia (10)
England (10)
Fiji (5)
Uruguay (0)
Wales (10)
查询 #3 显示了按点排序的池排名:
Australia (10)
England (10)
Wales (10)
Fiji (5)
Uruguay (0)
然而,真正的顺序应该是:
Wales (10)
England (10)
Australia (10)
Fiji (5)
Uruguay (0)
威尔士排名高于英格兰,因为威尔士击败英格兰,英格兰排名高于澳大利亚,因为英格兰击败澳大利亚
最佳答案
这需要 sql 2012+ 使用 LEAD()
和 LAG()
functions ,此时也只要求两支队伍的Rank相同。
架构
CREATE TABLE Table1
([team] varchar(1), [rank] int);
INSERT INTO Table1
([team], [rank])
VALUES
('A', 1),('B', 1),('C', 2);
CREATE TABLE Table2
([team1] varchar(1), [team2] varchar(1), [win] varchar(1));
INSERT INTO Table2
([team1], [team2], [win])
VALUES
('A', 'B', 'B'), ('C', 'A', 'A'),('C', 'B', 'B');
WITH breakTie AS (
SELECT
[team],
[rank],
LAG([team]) OVER (ORDER BY [rank]) PreviousTeam,
LEAD([team]) OVER (ORDER BY [rank]) NextTeam,
LAG([rank]) OVER (ORDER BY [rank]) PreviousRank,
LEAD([rank]) OVER (ORDER BY [rank]) NextRank
FROM Table1
)
SELECT *, CASE
WHEN B.[rank] = B.[NextRank] and B.[team] = T.[win] THEN 1
WHEN B.[rank] = B.[PreviousRank] and B.[team] = T.[win] THEN 1
ELSE 0
END as breakT
FROM breakTie B
LEFT JOIN Table2 T
ON ( B.team = T.team1 or B.team = T.team2)
AND ( B.NextTeam = T.team1 or B.NextTeam = T.team2)
ORDER BY
[rank],
CASE
WHEN B.[rank] = B.[NextRank] and B.[team] = T.[win] THEN 1
WHEN B.[rank] = B.[PreviousRank] and B.[team] = T.[win] THEN 1
ELSE 0
END
关于sql - 根据谁赢得了他们所玩的比赛,在池中排名相等的积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876744/
我正在尝试创建一个数据库来处理我在 Play 中的任务!框架。 这是我所拥有的: 在build.sbt中: libraryDependencies ++= Seq( jdbc, cache,
在我的游戏中定义一个表单!当编译器吐出这个奇怪的错误时 Controller :重载方法值映射与替代:...[一堆废话]...Error occurred in an application invo
我的应用程序有问题,@Max约束注释。 我的 Controller 方法定义如下: public static void save(@Required @Max(255) String content
我想创建一个像这样的标签: #{some_tag entity:user, field:'name'} 并期望它通过使用如下表达式生成带有用户名的输出: ${_entity._field} 我知道这行
我创建了一些 Model 对象来代表一家拥有多个客户的公司,以及一个由公司和客户组合以及多个发票行组成的发票对象。我创建了以下模型对象: @Entity public class Company ex
Playframework 现在是 typesafe-stack 的一部分。 那么,如果我要使用像主要语言一样的 Scala ,我现在应该下载什么? TypsafeStack 还是 PlayFrame
在玩!如果你这样称呼: void method() { User u = User(); u.name = "bob"; u.save(); while(true){/* endless loop *
我正在 Play 中构建一个应用程序!包含大量我想跟踪更改的数据的框架。在企业解决方案中,我可能会使用数据库触发器将更改复制到历史表中以跟踪这些更改。我不熟悉 Play!/JPA 中的类似范例,但也许
我一直在学习JavaScript技能,但是遇到一个问题,当单击此处是我的代码时,音频没有被播放。 Your browser does no
我想实现在某些模型保存后在表中插入一行的行为。我当前的解决方案简而言之是:(这只是我的代码示例,因此请不要评论数据库或描述符模型的正确性)。 我有一个监听器,用于在更新/插入实体上插入行为行 Desc
如何使我的模型类字段独一无二?例如。如果已经登录,我想为用户显示正确的消息。我必须自己编写验证检查并使用它,或者可以使用 JPA @UniqueConstraint? 最佳答案 我是这样做的: @En
我使用的是 Play 1.2.1。我想对我的用户密码进行哈希处理。我认为 Crypto.passwordHash 会很好,但事实并非如此。 passwordHash 文档说它返回 MD5 密码哈希值。
我一直在研究戏剧!框架模块并希望扩展它,添加一些功能。我发现了一个从Enhancer(play.classloading.enhancers.Enhancer)扩展的类,但不明白为什么Play!采用了
我使用的是 Play Framework 1.2.5。我有几个与 NAme 和 Age 字段相关的验证。年龄验证无法正常工作。即使年龄大于 18 岁,我也会收到错误消息。 下面是action方法中的验
我使用的是 Play Framework 1.2.5。两者有什么区别: @{Application.render()} 和 @Application.render() 第一个最好用在表单 Action
我是新来的!我被一些总是有错误的表格所困扰。即使所有字段都已填写,我也无法弄清楚问题是什么。 路线 GET /products/ controllers.Pr
我显示可编辑的数据库表行的列表。我想允许用户编辑显示表中的数据并同时保存所有更新。我应该如何取回 Controller 的更新列表? 最佳答案 由于 Play 可以绑定(bind)到 POJO,也可以
那么,假设我从 Controller 异步启动一个作业,然后渲染一些模板。 MyJob job = new MyJob(); job.doJob(); render(); 我的工作看起来像: 导入 p
当前使用的 Play Framework 为 2.0.4。当我尝试使用此命令升级到 2.6.21 时: addSbtPlugin("com.typesafe.play"% "sbt-plugin"%
我目前正在与 Play 合作!框架和看来日志记录只适用于游戏!仅但对于具有 LOGGER 初始化的类不起作用。 这是 logback.xml ${application.hom
我是一名优秀的程序员,十分优秀!