我有一张表格,按运动,开始和结束日期以及赢/输结果列出结果。我需要计算每赛季每项运动的胜率百分比。这是我的表:
UITapGestureRecognizer(target: self, action: #selector(onTap))
所以我想运行一个产生以下结果的查询:
table1
******
id sport won playerid season_start season_end updated_date
--- ----- ---- -------- ------------ ------------ ------------
1 rugby Y kato23 2016-01-01 2016-01-31 2016-02-01
2 rugby Y king54 2016-01-01 2016-01-31 2016-02-01
3 rugby N robby1 2016-03-01 2016-03-28 2016-04-01
4 rugby Y kelly2 2016-03-01 2016-03-28 2016-04-01
5 soccer Y kato23 2016-01-01 2016-01-31 2016-02-01
6 soccer Y jeri44 2016-01-01 2016-01-31 2016-02-01
7 soccer N matt24 2016-06-01 2016-06-30 2016-07-01
8 tennis Y kray43 2016-01-01 2016-01-31 2016-02-01
9 tennis Y jeri44 2016-01-01 2016-01-31 2016-02-01
10 tennis N jeri44 2016-01-01 2016-01-31 2016-02-01
我试过了:
sport season_start success_percent
----- ------------ ---------------
rugby 2016-01-01 100.00
rugby 2016-03-01 50.00
soccer 2016-01-01 100.00
soccer 2016-06-01 0.00
tennis 2016-01-01 66.66
但这只是给我整个计数而不是实际的成功百分比。我尝试使用case语句,但我对tsql不太好,或使用' Sum'计算胜利和损失,然后计算总胜负百分比。
有人可以提供执行此操作的tsql查询吗?
答案 0 :(得分:1)
您可以使用条件计数:
select sport, season_start,
sportcount = count(case when won = 'Y' then 'X' end) * 100.0 / count(*)
from table1
group by sport, season_start
答案 1 :(得分:1)
请尝试以下查询:
SELECT sport, season_start,
(CAST(COUNT(CASE won WHEN 'Y' THEN '1' ELSE NULL END) AS DECIMAL(10,2))) / CAST(COUNT(*) AS DECIMAL(10,2)))*100 AS sportcount
FROM table1
GROUP BY sport, season_start
实际上在COUNT聚合函数中我们检查 won 列的值,如果它等于'Y',我们将计算它,否则我们将忽略它。您可能知道Count聚合函数会忽略NULL值,因此如果赢得的Count不等于'Y',我们会生成一个NULL值,使Count忽略它。在我们统计赢得的数量后,我们只需要将其除以每项运动和赛季的总比赛数(计数(*)将计算在内)。
你把胜利放在了小组中,这会引起问题。具有相同组的每个记录将仅在结果集中显示一次。如果您需要在选择列表中获胜,可以尝试CROSS APPLY或Window Aggregate Functions。如果您需要,请更新您的问题,之后我会根据它更新我的答案。
请注意,如果您需要获得精确的结果,您可能需要将百分比计算部分CAST或CONVERT转换为十进制或数字或等数据类型。(这就是为什么我将两个计数转换为DECIMAL)< / p>