如何使用CASE表达式查询VIEW,计算赛马市场的平均赢赔率及位置赔率
解决赛马平均赢赔率与位置赔率的计算问题
先帮你梳理下原SQL里的问题:一是CASE表达式的用法逻辑不对,得把判断放在聚合函数内部才能筛选目标行计算平均值;二是语句存在语法缺失,比如CASE的闭合括号没写全。
下面是修正后完全符合你需求的SQL语句:
SELECT AVG(CASE WHEN Place = 1 THEN IndustrySP END) AS AvgWinOdds, AVG(CASE WHEN Place <= 10 THEN (IndustrySP - 1.0) / 5 END) AS AvgPlaceOdds FROM dbo.GrandNational;
代码逻辑说明:
- AvgWinOdds:仅当
Place=1(即赛马夺冠)时,取该行的IndustrySP值,其他情况返回NULL;AVG()函数会自动忽略NULL,最终得到所有冠军赛马的平均赢赔率 - AvgPlaceOdds:仅当
Place<=10时,计算(IndustrySP - 1.0)/5作为位置赔率,其他情况返回NULL;同样通过AVG()忽略NULL,得到前10名赛马的平均位置赔率
执行后会得到类似这样的结果(一行两列):
| AvgWinOdds | AvgPlaceOdds |
|---|---|
| 6.44 | 4.22 |
内容的提问来源于stack exchange,提问作者Dallas
相关产品推荐
相关产品推荐

