加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

怎样计较SQL中的比率?

发布时间:2021-03-06 02:07:52 所属栏目:编程 来源:网络整理
导读:假设我有一个包括以下字段的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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读