在sql中基于sigma和标准偏差选择离群值

在sql中基于sigma和标准偏差选择离群值,sql,outliers,Sql,Outliers,示例数据如下所示 我想为每个类从4西格玛中选择离群值。 我试过了 这似乎不起作用。我应该在这里使用have或where子句吗 我想要的结果是整个第3行和第8行。当您正在查看的条件是该行的属性时,请使用where,即其中class=1类的所有行或其中size>2类的所有行。如果条件是一组行的属性,则使用group by。。。例如,按类别分组,平均值大于2,所有类别的平均值均大于2 在这种情况下,您需要在哪里,但有一个复杂的问题。您没有足够的信息在每一行中单独编写必要的where子句,因此您必须通过

示例数据如下所示

我想为每个类从4西格玛中选择离群值。 我试过了

这似乎不起作用。我应该在这里使用have或where子句吗


我想要的结果是整个第3行和第8行。

当您正在查看的条件是该行的属性时,请使用where,即其中class=1类的所有行或其中size>2类的所有行。如果条件是一组行的属性,则使用group by。。。例如,按类别分组,平均值大于2,所有类别的平均值均大于2

在这种情况下,您需要在哪里,但有一个复杂的问题。您没有足够的信息在每一行中单独编写必要的where子句,因此您必须通过子查询获得它

最终,您需要从数据中选择值、类、大小,其中值<平均值-2*st或值>平均值+2*st;然而,您需要一个子查询来获取mean和st

一种方法是:

SELECT value, Data.class, size, mean, st FROM Data, 
INNER JOIN (
  SELECT class, AVG(value) AS mean, STDEV(value) AS st 
  FROM Data GROUP BY class
) AS stats ON stats.class = Data.class
WHERE value < mean - 2 * st OR value > mean + 2 * st;

这将创建一个子查询,获取每个类的平均值和标准偏差,将这些数字连接到具有匹配类的行,然后应用离群值检查。

在提供的示例数据中,哪个是boh?哪一个是国家数据中心?请看一看
SELECT value, Data.class, size, mean, st FROM Data, 
INNER JOIN (
  SELECT class, AVG(value) AS mean, STDEV(value) AS st 
  FROM Data GROUP BY class
) AS stats ON stats.class = Data.class
WHERE value < mean - 2 * st OR value > mean + 2 * st;