繁体   English   中英

计算sql中多列的平均值/标准差

[英]Compute Averages/Stdevs for multiple columns in sql

我有一个包含一些数字列的 sql 表,比如 my_field_1、my_field_2、...、my_field_n。 我希望能够以一种很好的方式查看每个字段的一些汇总统计信息。

我当前的解决方案是如下所示的代码:

select
  max(field_name) as field_name
  , avg(field) as average
  , stddev(field) as stddev
  , sum(case when field is null then 1 else 0 end) as null_vals
  , max(field) as max_val
  , min(field) as min_val
from
  (select 'first field' as field_name, my_field_1 as field from my_table) t

union all

...

我关心的每个领域都有一个街区。 这有效,但会导致大量重复代码,而且当我想添加另一个汇总统计信息时很烦人。 我可以创建一个生成此查询的 bash 脚本,而不是手动编写它,但有没有更好的方法?

您可以使用横向连接:

select field_name as field_name,
       avg(field) as average,
       stddev(field) as stddev,
       sum(case when field is null then 1 else 0 end) as null_vals,
       max(field) as max_val,
       min(field) as min_val
from my_table t cross join lateral
     (values ('my_field_1', my_field1),
             ('my_field_2', my_field2),
             . . .
     ) v(field_name, field)
group by field_name;

与您的查询一样,这假设所有字段值都是兼容的类型——并且希望是相同的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM