我在表格中有30个数字数字列。我想查找表格中所有列的平均值,标准值,百分位数。我不想手动编写所有列名称,如下所示
select date,
avg(col1), stddev(col1),
avg(col2), stddev(col2),
from table name group by date;
有没有办法一次找到所有列的平均值,标准值,百分位数。
答案 0 :(得分:1)
您可以使用横向连接简化逻辑:
select which, min(val), max(val), stddev(val), avg(val)
from t, lateral
(values ('col1', col1), ('col2', col2), . . .
) v(which, val)
group by which;
您仍然需要列出列,但只需在values
子句中执行此操作。
答案 1 :(得分:0)
动态SQL在Greenplum中有点小技巧。
以下是基于https://www.pivotalguru.com/?p=266
指示的示例$ psql postgres -c "create table foo (date date, c1 int, c2 int, c3 int);"
$ cat <<EOT >> /tmp/bar.sql
> select 'select ';
> select ' avg(' || attname || '), stddev(' || attname || '),' from pg_attribute
> where attrelid = 'foo'::regclass::oid and attnum > 0 and attname != 'date';
> select ' date from foo group by date;';
> EOT
$ psql -A -t -f /tmp/foo.sql postgres | psql -a postgres
select
avg(c1), stddev(c1),
avg(c2), stddev(c2),
avg(c3), stddev(c3),
date from foo group by date;
avg | stddev | avg | stddev | avg | stddev | date
-----+--------+-----+--------+-----+--------+------