如何在postgresql

时间:2016-03-16 09:17:05

标签: sql postgresql

我认为我的问题与this one相同,但并不清楚,因此回复并不是我所寻找的。

我有一个由osm2pgsql构建的70列和大约一百万行的表。在70列中,每行只有2个值(一个是带有索引的地理位置),其余的则形成一个稀疏矩阵。

我在这个fiddle中加入了我所拥有的和我想要的简化版本。 这里有一点解释:每列的每个值都有计数,每列也都有计数,有一个NULL值表示它是列数。

1 个答案:

答案 0 :(得分:0)

我得到了部分回应:

SELECT string_agg(
   'SELECT ' ||
       '''' || quote_ident(attname) || ''' as column_name, ' ||
       quote_ident(attname) || '::text as value_name, ' ||
   ' count(*) as value_count' ||
   ' FROM ' || attrelid::regclass ||
      -- ' WHERE ' || quote_ident(attname) || ' is not NULL' ||
   ' GROUP BY ' || quote_ident(attname) || ' ',
   'UNION ALL ')
FROM   pg_attribute
WHERE  attrelid = '<my_table_name>'::regclass
AND    attnum  >= 1           -- exclude tableoid & friends (neg. attnum)
AND    attisdropped is FALSE  -- exclude deleted columns
GROUP  BY attrelid;

感谢that thread为NULL时,我仍然需要获取正确的值,但我非常接近。