加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

unpivot和PostgreSQL

发布时间:2020-12-13 16:35:42 所属栏目:百科 来源:网络整理
导读:PostgreSQL中是否有等效功能? 创建一个示例表: CREATE TEMP TABLE foo (id int,a text,b text,c text);INSERT INTO foo VALUES (1,'ant','cat','chimp'),(2,'grape','mint','basil'); 您可以使用UNION ALL“展开”或“uncrosstab” SELECT id,'a' AS colna
PostgreSQL中是否有等效功能?
创建一个示例表:
CREATE TEMP TABLE foo (id int,a text,b text,c text);
INSERT INTO foo VALUES (1,'ant','cat','chimp'),(2,'grape','mint','basil');

您可以使用UNION ALL“展开”或“uncrosstab”

SELECT id,'a' AS colname,a AS thing
FROM foo
UNION ALL
SELECT id,'b' AS colname,b AS thing
FROM foo
UNION ALL
SELECT id,'c' AS colname,c AS thing
FROM foo
ORDER BY id;

这可以在foo上运行3个不同的子查询,一个对于我们要解除汇总的每一列,并在一个表中返回每个子查询的每个记录。

但是这将扫描表N次,其中N是要解除的列数。这是无效率的,当一个很大的问题需要很长时间来扫描时,这个问题很大。

而是使用:

SELECT id,unnest(array['a','b','c']) AS colname,unnest(array[a,b,c]) AS thing
FROM foo
ORDER BY id;

这更容易编写,只会扫描一次表。

数组[a,b,c]返回数组对象,值为a,b和c作为元素。
unnest(array [a,b,c])将每个数组元素的结果分成一行。

希望有帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读