创建赢/输比率表/功能

时间:2015-04-20 23:02:09

标签: sql-server database

我正在制作一个应用程序,它会为MMO的PVP系统提供赢/输比率(我有一个特定的设计,但它并不重要)。这个想法是玩家完成一场比赛并打入一些我将在下面包含的数据。在填充数据库之后,玩家可以打入对手的战队标签,即将到来的地图名称,游戏类型和团队组成,以获得对手的该地图的W / L比率。有一种方法可以确定在他们的几率下可以期待什么。

我已经设计了这些表格,但是我对这样做的功能以及如何集成它感到困惑。如果它只是直接W / L,没什么大不了的。但是,一旦我在地图和其他因素中投入,它就会比我能说的更多。

另外,一个小的最佳实践问题:将Wins / Loss作为W / L输入还是将其设置为布尔值更好,因此T = W且F = L?

那么函数看起来是什么样的呢?表数据如下,从我的表创建中解除:

CREATE TABLE [dbo].[Games] (
[GameID]            INT           NOT NULL,
[SubmitterClanID]   INT           NULL,
[OpponentClanID]    INT           NULL,
[GameOutcome]       NVARCHAR (3)  NULL,
[SubmitterUnitSize] INT           NULL,
[OpposingUnitSize]  INT           NULL,
[GameMode]          VARCHAR (50)  NULL,
[MapName]           VARCHAR (50)  NULL,
[Grids]             CHAR (2)      NULL,
[1stDeck]           VARCHAR (50)  NULL,
[2ndDeck]           VARCHAR (50)  NULL,
[3rdDeck]           VARCHAR (50)  NULL,
[4thDeck]           VARCHAR (50)  NULL,
[Narrative]         VARCHAR (MAX) NULL,

在这种情况下,甲板是敌人装载。 GameID会在填充时自动创建,ID为+1。因此,该功能至少需要根据家族ID,地图名称和游戏模式显示W / L.理想情况下,它还包括甲板和战略地图网格,但我很满意,没有这些。

提前致谢!

1 个答案:

答案 0 :(得分:1)

编辑:Nvm,刚刚意识到你在寻找一个功能,而不仅仅是一个查询。

假设您不希望降低比率,只需将变量插入以下的where子句即可。如果要添加这些,还可以按网格或其他因素进行分组。

Select Count(distinct case when GameOutcome = 'Win' then GameID end)*100.0
    /Count(distinct GameID) as PercentWon  --OR
, Cast(Count(distinct case when GameOutcome = 'Win' then GameID end) as Varchar) 
    + ':' + Cast(Count(distinct case when GameOutcome = 'Loss' then GameID end) as Varchar) as WinLossRatio
from Games
where OpponentClanID = @OppID
and MapName = @Map
and GameMode = @GameType