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)
我有一个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)