PostgreSQL与交叉表查询

PostgreSQL提供了一个tablefunc 模块,内置了多个函数,其中就有crosstab(交叉表,又叫行转列,或者长表转宽表),具体使用参见PostgreSQL文档(中文英文)。

如果不清楚生成的宽表有多少列,或者列太多,手工敲很容易吃力不讨好,那么可以借助这个函数(pivotcode)来简化工作,

但这个函数,有如下的缺点,

  • 如果返回的列有空格,需要自己手工修改
  • 可能会有大量的Null值,而不是0
  • 返回的是一个SQL,你需要copy出来后自己再执行(虽然也可以改进下,直接生成表)

下面这个plpython函数,pivotmytable,可以很好地解决上面的问题,python 2和python3(只需讲函数里的plpythonu替换为plpython3u即可)均支持,

 

Leave a Reply

Your email address will not be published. Required fields are marked *