检测并忽略 MySQL MIN/MAX 查询中的异常数字

问题描述 投票:0回答:1

我正在尝试找到一个简单数据集的最小值和最大值......

Score
15
12
8
28
5

只要这样做就可以了。

SELECT MIN(Score) AS minScore, MAX(Score) AS maxScore FROM Scores;

应该返回 5 和 28。 但是,如果不知何故,大量的人最终进入了比赛结果,结果又如何呢……

Score
15
120000
8
28
5

这将返回 5 和 120000。

我需要做的是以某种方式让查询检测到异常大的数字并在返回 5 和 28 的结果中忽略它。

实际的集合会在某个未知范围内有大量数字,因此异常应该很明显。希望有某种数学方法来忽略异常。

与给出的类似问题不完全相同......
这似乎省略了异常之外的一些最高数字,这可能不会改变平均值太多,但在我的情况下,我需要忽略异常的实际 MIN 和 MAX 值。另外,我不能使用子查询,必须是直接计算来确定数字。

sql mysql math max min
1个回答
0
投票

使用示例值进行演示:

mysql> select min(score) as MinScore, max(score) as MaxScore from mytable;
+----------+----------+
| MinScore | MaxScore |
+----------+----------+
|        5 |    12000 |
+----------+----------+

mysql> select 
  min(case when score between 0 and 100 then score end) as MinScore,
  max(case when score between 0 and 100 then score end) as MaxScore 
from mytable;
+----------+----------+
| MinScore | MaxScore |
+----------+----------+
|        5 |       28 |
+----------+----------+

如果值不满足条件,CASE 表达式默认返回 NULL。

大多数聚合函数,如 MIN()、MAX()、SUM()、COUNT() 都会忽略 NULL。

如果需要,您可以使用其他表达方式。我用的,

BETWEEN 0 AND 100
只是一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.