SQL 查询以汇总 table 中每一列的数据

SQL Query to summarize data for each column in table

我有一个table这样的

col_1 col_2 ... col_n
1      2    ...   3
2     -2    ...   
       0    ...   1

如何使用 sql 生成以下 table?

col_name min max count
col_1     1    2     2
col_2    -2    2     3
       ...
col_n     1    3     2

我基本上认为我需要转向某个地方,但我不知道如何

谢谢!

select colname, min(val), max(val), count(*)
from (
select 'col_1' as colname,
col_1 as val
from t
union 
select 'col_2',
col_2
from t
-- and so on
) x
where val is not null
group by colname

这是另一种方法。感谢 JPW 的建议。

使用 unpivot 应该可以,但您必须提前指定所有列。如果这不切实际,您可能需要研究动态 SQL 解决方案。

select
  col        as col_name,
  min(val)   as min, 
  max(val)   as max, 
  count(val) as count
from (
  select col, val 
  from t -- your table here
  unpivot (
    val for col in (col_1, col_2, col_n) -- your columns here
  ) u 
) r
group by col;

样本SQL Fiddle(Oracle 11g R2)