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