[英]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.