MySQL单表多条件聚合统计美式橄榄球比赛数据问题
MySQL多场景聚合计算美式橄榄球比赛YAC指标方案
你可以通过嵌套CASE WHEN语句在单次聚合中实现多场景的YAC计算,同时保留所有统计指标输出在同一张结果表中,参考实现代码如下:
SELECT possession_team AS Team, ball_carrier_receiver AS Player, -- 总推进码数 对应原过滤规则统计 SUM(CASE WHEN run_pass='P' AND pass_result <> 'S' AND pass_result <> 'R' THEN gain ELSE 0 END) AS YDS, -- 总BIA统计 SUM(CASE WHEN run_pass='P' AND pass_result <> 'S' AND pass_result <> 'R' THEN bia ELSE 0 END) AS `TOT BIA`, -- 分场景计算总YAC SUM( CASE -- 仅统计有效完成传球 WHEN run_pass='P' AND pass_result = 'C' AND pass_result <> 'S' AND pass_result <> 'R' THEN CASE -- 达阵且端区内接球场景,可按需调整计算规则 WHEN series_end = 'Touchdown' AND bia > gain THEN bia - (gain - bia) -- 普通完成传球场景沿用原公式 ELSE gain - bia END ELSE 0 END ) AS `TOT YAC` FROM plays -- 若需同时统计冲球等其他类型进攻数据,无需加WHERE过滤,所有过滤逻辑放在CASE WHEN中即可 GROUP BY possession_team, ball_carrier_receiver;
逻辑说明
- 把原来写在WHERE里的过滤规则迁移到每个聚合函数的
CASE WHEN中,避免因为过滤条件导致其他类型的进攻数据丢失,方便你在同一条SQL中扩展30余项其他统计指标。 - YAC的计算通过两层
CASE WHEN实现:第一层先判断是否为有效完成传球,第二层再区分普通完成传球、达阵端区内接球两类场景分别计算单条记录的YAC贡献,最终求和得到总YAC。你可以根据实际的规则调整达阵场景的计算逻辑即可匹配需求。
内容的提问来源于stack exchange,提问作者newcoderfball
相关产品推荐
相关产品推荐

