函數(shù)說明
語(yǔ)法:unnest(anyarray)
返回值:setof anyelement(可以理解為一個(gè)(臨時(shí))表)
說明:unnest函數(shù)將輸入的數(shù)組轉(zhuǎn)換成一個(gè)表,這個(gè)表的每一列都代表相應(yīng)的一個(gè)數(shù)組中的元素。
如果unnest與其他字段一起出現(xiàn)在select中,就相當(dāng)于其他字段進(jìn)行了一次join。
使用場(chǎng)景
完成行轉(zhuǎn)列的場(chǎng)景
使用實(shí)例
示例一: 單個(gè)unnest
select unnest(Array[1,2,3]) as a;
a
---
1
2
3
(3 rows)
示例二: unnest與其他字段一起查詢(常用場(chǎng)景)
select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course;
name | course
------+--------
張三 | 語(yǔ)文
張三 | 數(shù)學(xué)
張三 | 英語(yǔ)
(3 rows)
示例三: 多個(gè)unnest與其他字段一起查詢
多個(gè)unnest一起使用時(shí)要注意:
- 如果2個(gè)unnest返回的表行數(shù)相同,則是根據(jù)行號(hào)進(jìn)行join的,就是輸出結(jié)果行1對(duì)應(yīng)行1,行2對(duì)應(yīng)行2...
select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course, unnest(Array[90,85,80]) as score;
name | course | score
------+--------+-------
張三 | 語(yǔ)文 | 90
張三 | 數(shù)學(xué) | 85
張三 | 英語(yǔ) | 80
(3 rows)
- 如果2個(gè)unnest返回的表行數(shù)不同,則返回的結(jié)果是笛卡爾join,返回的總行數(shù)=表1行數(shù) * 表2行數(shù)
select '張三' as name, unnest(Array['語(yǔ)文','數(shù)學(xué)','英語(yǔ)']) as course, unnest(Array['籃球','足球']) as interest;
name | course | interest
------+--------+----------
張三 | 語(yǔ)文 | 籃球
張三 | 數(shù)學(xué) | 足球
張三 | 英語(yǔ) | 籃球
張三 | 語(yǔ)文 | 足球
張三 | 數(shù)學(xué) | 籃球
張三 | 英語(yǔ) | 足球
(6 rows)