Я бы хотел посчитать, сколько элементов в каждом group by
больше, чем $ \ mu + \ sigma $, $ \ mu + 2 \ sigma $ и т. Д.
Пока я нашел решениесначала создаю таблицу gp
с $ \ mu $ и $ \ sigma $
CREATE TABLE gp AS
SELECT col_a,
col_b,
AVG(y) AS y_mean,
STDDEV(y) AS y_std
FROM my_table
GROUP BY col_a, col_b;
Затем я делаю left join
с исходной таблицей и выполняю подсчет через
SELECT col_a,
col_b,
SUM(CASE
WHEN y>y_mean+y_std THEN 1
ELSE 0
END) AS std1,
SUM(CASE
WHEN y>y_mean+2*y_std THEN 1
ELSE 0
END) AS std2,
SUM(CASE
WHEN y>y_mean+3*y_std THEN 1
ELSE 0
END) AS std3,
FROM (
SELECT a.*,
b.y_mean,
b.y_std
FROM(
(SELECT col_a,
col_b,
y
FROM my_table) a
LEFT JOIN (SELECT * FROM gp) b
ON a.col_a=b.col_a AND a.col_b=b.col_b)
)
GROUP BY col_a, col_b
Мне интересно, есть ли более эффективный способ достижения того же результата.