SET any_join_distinct_right_table_keys = 1; SET joined_subquery_requires_alias = 0; DROP TABLE IF EXISTS series; CREATE TABLE series(i UInt32, x_value Float64, y_value Float64) ENGINE = Memory; INSERT INTO series(i, x_value, y_value) VALUES (1, 5.6,-4.4),(2, -9.6,3),(3, -1.3,-4),(4, 5.3,9.7),(5, 4.4,0.037),(6, -8.6,-7.8),(7, 5.1,9.3),(8, 7.9,-3.6),(9, -8.2,0.62),(10, -3,7.3); /* varSamp */ SELECT varSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT varSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varSamp(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1) AS res2 FROM series ); /* stddevSamp */ SELECT stddevSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT stddevSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevSamp(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1)) AS res2 FROM series ); /* skewSamp */ SELECT skewSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT skewSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT skewSamp(x_value) AS res1, ( sum(x_value * x_value * x_value) / count() - 3 * sum(x_value * x_value) / count() * sum(x_value) / count() + 2 * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() ) / pow((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1), 1.5) AS res2 FROM series ); /* kurtSamp */ SELECT kurtSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT kurtSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT kurtSamp(x_value) AS res1, ( sum(x_value * x_value * x_value * x_value) / count() - 4 * sum(x_value * x_value * x_value) / count() * sum(x_value) / count() + 6 * sum(x_value * x_value) / count() * sum(x_value) / count() * sum(x_value) / count() - 3 * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() ) / pow((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1), 2) AS res2 FROM series ); /* varPop */ SELECT varPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT varPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varPop(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count() AS res2 FROM series ); /* stddevPop */ SELECT stddevPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT stddevPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevPop(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count()) AS res2 FROM series ); /* skewPop */ SELECT skewPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT skewPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT skewPop(x_value) AS res1, ( sum(x_value * x_value * x_value) / count() - 3 * sum(x_value * x_value) / count() * sum(x_value) / count() + 2 * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() ) / pow((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count(), 1.5) AS res2 FROM series ); /* kurtPop */ SELECT kurtPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); SELECT kurtPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT kurtPop(x_value) AS res1, ( sum(x_value * x_value * x_value * x_value) / count() - 4 * sum(x_value * x_value * x_value) / count() * sum(x_value) / count() + 6 * sum(x_value * x_value) / count() * sum(x_value) / count() * sum(x_value) / count() - 3 * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() * sum(x_value) / count() ) / pow((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count(), 2) AS res2 FROM series ); /* covarSamp */ SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM ( SELECT arrayJoin([1]) AS ID2, covarSamp(x_value, y_value) AS COVAR1 FROM series ) ANY INNER JOIN ( SELECT arrayJoin([1]) AS ID2, sum(VAL) / (count() - 1) AS COVAR2 FROM ( SELECT (X - AVG_X) * (Y - AVG_Y) AS VAL FROM ( SELECT toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y FROM series ) USING ID ) ) USING ID2; /* covarPop */ SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM ( SELECT arrayJoin([1]) AS ID2, covarPop(x_value, y_value) AS COVAR1 FROM series ) ANY INNER JOIN ( SELECT arrayJoin([1]) AS ID2, sum(VAL) / count() AS COVAR2 FROM ( SELECT (X - AVG_X) * (Y - AVG_Y) AS VAL FROM ( SELECT toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y FROM series ) USING ID ) ) USING ID2; /* corr */ SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(corr(x_value, y_value) - covarPop(x_value, y_value) / (stddevPop(x_value) * stddevPop(y_value))), 6) FROM series; /* quantile AND quantileExact */ SELECT '----quantile----'; SELECT quantileExactIf(number, number > 0) FROM numbers(90); SELECT quantileExactIf(number, number > 100) FROM numbers(90); SELECT quantileExactIf(toFloat32(number) , number > 100) FROM numbers(90); SELECT quantileExactIf(toFloat64(number) , number > 100) FROM numbers(90); SELECT quantileIf(number, number > 100) FROM numbers(90); SELECT quantileIf(toFloat32(number) , number > 100) FROM numbers(90); SELECT quantileIf(toFloat64(number) , number > 100) FROM numbers(90); DROP TABLE series;