目标统计值:均值、方差、标准差、众数、中位数。
- 均值
AVG
eg:select avg(item_a) from table_a;
- 中位数
percentile
或者percentile_approx
,此函数本是求分位数,但是0.5的分位数不就是中位数嘛!
若是int型(bigint等)用percentile
例:select percentitle(item_a,0.5) from table_a
;
若是float(或者double等)用percentile_approx
,例:select percentitle_approx(item_a,0.5) from table_a
。
approx是approximate的简写。 - 众数
众数没有函数。从帖子中可以看到有此种写法:
但此种写法不适合多字段同时获得。至于用不用,看你需求了。SELECT salary,COUNT(*) AS cnt FROM salaries GROUP BY salary HAVING count(*) >= ALL(SELECT COUNT(*) FROM salaries GROUP BY salary)
- 标准差
你可以看到一些帖子写了三个:stddev
,stddev_samp
,stddev_pop
。他们的关系是stddev
=stddev_pop
,都是 1 N Σ i = 1 N ( x i − x m e a n ) 2 \sqrt{\frac1N \Sigma_{i=1}^N(x_i-x_{mean})^2} N1Σi=1N(xi−xmean)2,而stddev_samp
是 1 N − 1 Σ i = 1 N ( x i − x m e a n ) 2 \sqrt{\frac1{N-1} \Sigma_{i=1}^N(x_i-x_{mean})^2} N−11Σi=1N(xi−xmean)2。至于用哪个,看你选择了。 例:select stddev_pop(item_a) from table_a;
- 方差
var_pop
和var_samp
,差别同 标准差,不赘述。
致谢:
- https://blog.csdn.net/haramshen/article/details/52668586
- https://www.cxyzjd.com/article/weixin_34883093/112637731