下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當前位置:軟件下載吧 > 技術開發 > 數據庫 > PostgreSQL 實現將多行合并轉為列

PostgreSQL 實現將多行合并轉為列

時間:2024-02-21 13:55作者:下載吧人氣:21

需求將下列表格相同id的name拼接起來輸出成一列

id Name
1 peter
1 lily
2 john

轉化后效果:

id Name
1 peter;lily
2 john;

實現方式使用 array_to_string 和 array_agg 函數,具體語句如下:

string_agg(expression, delimiter) 把表達式變成一個數組

string_agg(expression, delimiter) 直接把一個表達式變成字符串

select id, array_to_string( array_agg(Name), ‘;’ ) from table group by id

補充:Postgresql實現動態的行轉列

問題

在數據處理中,常遇到行轉列的問題,比如有如下的問題:

有這樣的一張表

“Student_score”表:

姓名 課程 分數
張三 數學 83
張三 物理 93
張三 語文 80
李四 語文 74
李四 數學 84
李四 物理 94

我們想要得到像這樣的一張表:

姓名 數學 物理 語文
李四 84 94 74
張三 83 93 80

當數據量比較少時,我們可以在Excel中使用數據透視表pivot table的功能實現這個需求,但當數據量較大,或者我們還需要在數據庫中進行后續的數據處理時,使用數據透視表就顯得不那么高效。

下面,介紹如何在Postgresql中實現數據的行轉列。

靜態寫法

當我們要轉換的值字段是數值型時,我們可以用SUM()函數:

CREATE TABLE Student_score(姓名 varchar, 課程 varchar, 分數 int);
INSERT INTO Student_score VALUES(‘張三’,’數學’,83);
INSERT INTO Student_score VALUES(‘張三’,’物理’,93);
INSERT INTO Student_score VALUES(‘張三’,’語文’,80);
INSERT INTO Student_score VALUES(‘李四’,’語文’,74);
INSERT INTO Student_score VALUES(‘李四’,’數學’,84);
INSERT INTO Student_score VALUES(‘李四’,’物理’,94);
select 姓名
,sum(case 課程 when ‘數學’ then 分數 end) as 數學
,sum(case 課程 when ‘物理’ then 分數 end) as 物理
,sum(case 課程 when ‘語文’ then 分數 end) as 語文
from Student_score
GROUP BY 1

標簽[db:關鍵字]

相關下載

查看所有評論+

網友評論

網友
您的評論需要經過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 偷拍激情视频一区二区三区| 国产精品视频第一区二区三区| 亚洲久热无码av中文字幕| 久久精品国产99国产精品澳门| 124du在线观看| 欧美日本国产VA高清CABAL| 夜夜精品无码一区二区三区| 免费一区二区三区四区五区| www.av视频在线| 狠狠躁日日躁夜夜躁2022麻豆| 女王放屁给我闻vk| 人妻va精品va欧美va| 乱色熟女综合一区二区三区 | 国产精品免费αv视频| 国产成人精品久久亚洲高清不卡| 亚洲国产亚洲综合在线尤物| 最新黄色免费网站| 最新欧美一级视频| 国产在线观看中文字幕| 四虎影视永久免费观看网址 | 综合色在线观看| 性欧美成人免费观看视| 免费在线看视频| 99在线观看精品| 欧美日韩小视频| 国产激情电影综合在线看| 亚洲精品99久久久久中文字幕| 中文字幕一区日韩精品| 精品在线小视频| 好爽好紧好大的免费视频国产| 人人妻人人澡人人爽欧美一区 | 亚洲欧洲日韩在线电影| 老汉色av影院| 日韩人妻无码一区二区三区久久| 国产免费小视频在线观看| 中文字幕乱码无码人妻系列蜜桃| 精品国产一区二区三区久久| 在线免费污视频| 亚洲中文字幕久久精品无码喷水| 高清毛片aaaaaaaa**| 欧美日韩北条麻妃一区二区|