首页 > 解决方案 > MySQL NFL QB 评级 - 如果总和超出设定范围,是否可以设置最小值和最大值?

问题描述

我正在尝试在 MySQL 中计算 NFL 的四分卫评分。我有四个类别,但我需要能够为每个类别设置一个限制。如果它加起来是一个负数,它需要是 0。如果它加起来高于 2.375,我需要它是 2.375。

如何为这四个查询中的每一个添加最小值和最大值?

ROUND(((sum(case when pass_result='C' then 1 else 0 end)/sum(case when run_pass='P' then 1 else 0 end))-0.3)*5,3) AS 'Rule 1',
ROUND(((sum(gain)/sum(case when run_pass='P' then 1 else 0 end))-3)*0.25,3) AS 'Rule 2',
ROUND((sum(case when series_end='Touchdown' then 1 else 0 end)/sum(case when run_pass='P' then 1 else 0 end))*20,3) as 'Rule 3',
ROUND((2.375-(sum(case when pass_result='IN' then 1 else 0 end)/sum(case when run_pass='P' then 1 else 0 end))*25),3) as 'Rule 4'

标签: mysqlstatistics

解决方案


您可以使用函数GREATEST()LEAST()

LEAST(GREATEST(ROUND(((SUM(pass_result='C') / SUM(run_pass='P'))-0.3)*5,3), 0), 2375) AS Rule1,
LEAST(GREATEST(ROUND(((SUM(gain)/SUM(run_pass='P'))-3)*0.25,3), 0), 2375) AS Rule2,
LEAST(GREATEST(ROUND((SUM(series_end='Touchdown') / SUM(run_pass='P'))*20,3), 0), 2375) AS Rule3,
LEAST(GREATEST(ROUND((2.375-(SUM(pass_result='IN')/SUM(run_pass='P'))*25),3), 0), 2375) AS Rule4

当您应用GREATEST()以下x值时:

GREATEST(x, 0) 

那么如果x为负,则结果为0

当您应用LEAST()以下x值时:

LEAST(x, 2375)

那么 ifx大于2375结果是2375.

我还通过仅使用内部的布尔表达式SUM()而不是表达式来简化代码CASE,因为布尔表达式的计算结果为1fortrue0for false


推荐阅读