第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

unpivot和PostgreSQL

unpivot和PostgreSQL

繁星coding 2019-09-24 10:37:21
PostgreSQL中有一個不可更改的等效函數(shù)嗎?
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

創(chuàng)建一個示例表:


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來“取消透視”或“取消交叉表”:


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;

這會在上運行3個不同的子查詢foo,每個要取消透視的列一個,然后在一個表中返回每個子查詢中的每個記錄。


但這將掃描表N次,其中N是您要取消透視的列數(shù)。這效率低下,而且是一個很大的問題,例如,當您使用非常大的表進行掃描時,這需要很長時間。


而是使用:


SELECT id,

       unnest(array['a', 'b', 'c']) AS colname,

       unnest(array[a, b, c]) AS thing

FROM foo

ORDER BY id;

這更容易編寫,并且只會掃描表一次。


array[a, b, c]返回一個數(shù)組對象,其值分別為a,b和c。 unnest(array[a, b, c])將數(shù)組的每個元素的結果分成一行。


希望有幫助!


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 921 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號