我有一个数据集,看起来像这样:
我想将所有co
值聚合到一行上,因此最终结果如下所示:
看起来很简单,对吧?只需使用crosstab
编写一个查询,就像this answer中建议的那样。问题是这需要我CREATE EXTENSION tablefunc;
,并且我没有对我的DB的写访问权限。
有人能推荐一个替代方案吗?
我有一个数据集,看起来像这样:
我想将所有co
值聚合到一行上,因此最终结果如下所示:
看起来很简单,对吧?只需使用crosstab
编写一个查询,就像this answer中建议的那样。问题是这需要我CREATE EXTENSION tablefunc;
,并且我没有对我的DB的写访问权限。
有人能推荐一个替代方案吗?
5条答案
按热度按时间evrscar21#
条件聚合:
kupeojn62#
您可以使用DO生成并PREPARE您自己的带有交叉表列的SQL,然后EXECUTE它。
2ul0zpep3#
从9.4版本开始,有了json_object_agg(),它让我们可以动态地做一些必要的魔术。
然而,要完全动态,* 临时类型(临时表)* 必须 * 首先 * 通过在***匿名过程中运行SQL-EXEC来构建。***
***DB FIDDLE(英国):***https://dbfiddle.uk/Sn7iO4zL
***免责声明:*通常情况下,创建TEMP TABLES的能力被授予最终用户,但YMMV。另一个问题是普通用户是否可以将anon. procedures作为in-line code执行。
9lowa7mx4#
从postgres 9.4开始你可以使用json_object_agg...
qhhrdooz5#
通过使用pivot,我们也可以实现您所需的输出