日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

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

軟件下載吧

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

PostgreSQL 實現將多行合并轉為列

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

需求將下列表格相同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:關鍵字]

相關下載

查看所有評論+

網友評論

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

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 免费看一毛一级毛片视频 | 可以免费观看欧美一级毛片 | 亚洲综合精品一二三区在线 | 日韩视频免费一区二区三区 | bt天堂国产亚洲欧美在线 | 国产成人综合亚洲亚洲欧美 | 在线观看欧美亚洲日本专区 | 男女免费爽爽爽在线视频 | 亚洲天堂久久新 | 美女张开腿让男人捅的视频 | 日本www免费视频网站在线观看 | 亚洲精品成人中文网 | 黄色毛片在线 | 成人三级在线视频 | 玖玖啪 | 国产福利一区二区三区 | 九九免费在线视频 | 国产精品爱久久久久久久小 | 99久久国产免费中文无字幕 | 久久99精品视频在线在线观看 | 成年片美女福利视频在线 | 亚洲精品国精品久久99热 | 亚洲国产成人综合 | 午夜一级毛片不卡 | 在线视频观看一区 | 国产日韩欧美精品一区二区三区 | 国产欧美一区二区日本加勒比 | 国产永久在线观看 | 日本黄网在线观看 | 国产成人免费片在线视频观看 | 亚洲aⅴ男人的天堂在线观看 | 久久久久久久性潮 | 欧美另类videosbestsex久久 | 波多野结衣3女同在线观看 波多野结衣aⅴ在线 | 欧美成人精品一区二区三区 | 免费观看性欧美大片无片 | 午夜在线社区视频 | 高清性色生活片欧美在线 | 国产在线观看午夜不卡 | 成人精品一区二区三区 | 国产精品亚洲国产三区 |