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作为元素。 希望有帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |