是否可以在PostgreSQL中编写一个返回带有任意列名的表的函数?

时间:2016-12-29 23:18:18

标签: sql postgresql function

我有几个具有同名表的模式,我想快速检索数百个组中的文本数据(例如,词频)的一些统计信息。

以下是一个示例查询:

SELECT subreddit, 
       round(avg(CASE WHEN text ILIKE '%trump%' THEN 1 
                        ELSE 0 END), 
             5) AS trump_relative_frequency, 
       count(*) 
       FROM politics.comments 
       GROUP BY subreddit 
       HAVING count(*) > 100 
       ORDER BY trump_relative_frequency DESC;

       subreddit       | trump_relative_frequency | count  
-----------------------+--------------------------+--------
 NeverTrump            |                  0.34457 |    267
 BannedFromThe_Donald  |                  0.28261 |    138
 askhillarysupporters  |                  0.26429 |    140
 Impeach_Trump         |                  0.25210 |    357
 AmericanPolitics      |                  0.24606 |    317
 AskThe_Donald         |                  0.24561 |   1653
 AskTrumpSupporters    |                  0.24044 |   3215
 KasichForPresident    |                  0.23519 |    591
 HillaryForAmerica     |                  0.21578 |    431
 WomenForTrump         |                  0.20280 |    143
 Republican            |                  0.19994 |   3356
 EnoughTrumpSpam       |                  0.19972 |  15457

我想快速执行除'trump'以外的各种字符串的类似查询,但似乎我必须声明返回的列名,技术上可以根据参数确定,但是不是在你只构建函数时。

我看到的唯一解决方法是返回一个包含搜索参数列的表,另一个包含包含subreddit:count键值对的HSTORE的表。这不是理想的,因为我想将数据导出到具有上面给定列名的CSV,而我唯一的其他解决方案是使用Python或其他编程语言通过命令行脚本执行查询。

有没有更好的方法来解决这个问题?

0 个答案:

没有答案