设为首页 - 加入收藏 华夏网 (http://www.hxwgxz.com)- 云主机,资讯,互联网,人工智能,云计算,大数据,区块链,VR,站长网!
热搜: 2019 google 中国 2020
当前位置: 主页 > 编程 > 正文

如何计算SQL中的比率?

发布时间:2021-03-06 05:30 所属栏目:[编程] 来源:网络整理
导读:假设我有一个包含以下字段的GAME表 user_id,result 我希望计算胜利百分比,定义为记录总数 result = 'Win' 与记录总数相比 result '' 我如何在SQL中执行此操作并以最高赢率百分比的顺序返回结果? 解决方法 大多数数据库系统应该能够使用类似于以下内容的方式

假设我有一个包含以下字段的GAME表

user_id,result

我希望计算胜利百分比,定义为记录总数

result = 'Win'

与记录总数相比

result <> ''

我如何在SQL中执行此操作并以最高赢率百分比的顺序返回结果?

解决方法

大多数数据库系统应该能够使用类似于以下内容的方式来处理:
Select user_id,Sum( Case When Result = 'Win' Then 1 Else 0 End ) / Count(*) * 1.0 As WinPercent
From Game
Group By user_id
Order By WinPercent Desc

顺便说一下,我假设您打算说胜利百分比是总比赛数中的胜利总数.如果你真的意味着结果<> ”,然后你需要像这样修改查询:

Select user_id,Sum( Case When Result = 'Win' Then 1 Else 0 End ) 
        / Sum( Case When Result <> '' Then 1 Else 0 End ) * 1.0 As WinPercent
From Game
Group By user_id
Order By WinPercent Desc

加成

在评论中建议这是SQL Server特定的.不是这样.上述解决方案中的所有内容都是SQL标准的一部分.给定的数据库系统是否实现了所需的所有功能显然是另一回事.因此,如果我们正在寻找一种实际上可以在大多数数据库系统上运行的解决方案,那么支持方差最大的一个特性可能就是使用Order By中的列别名.您可以通过几种方式实现等效,但在大多数数据库系统上可以使用的一种方法是使用派生表:

Select Z.user_id,Z.WinPercent
From    (
        Select user_id,Sum( Case When Result = 'Win' Then 1 Else 0 End ) 
                / Sum( Case When Result <> '' Then 1 Else 0 End ) * 1.0 As WinPercent
        From Game
        Group By user_id
        ) As Z
Order By Z.WinPercent Desc

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章