午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列

PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列

熱門標(biāo)簽:辦公外呼電話系統(tǒng) 外呼調(diào)研系統(tǒng) 打電話智能電銷機(jī)器人授權(quán) 美容工作室地圖標(biāo)注 合肥公司外呼系統(tǒng)運(yùn)營商 海豐有多少商家沒有地圖標(biāo)注 漯河外呼電話系統(tǒng) 地圖標(biāo)注和圖片名稱的區(qū)別 重慶自動外呼系統(tǒng)定制

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

id Name
1 peter
1 lily
2 john

轉(zhuǎn)化后效果:

id Name
1 peter;lily
2 john;

實(shí)現(xiàn)方式使用 array_to_string 和 array_agg 函數(shù),具體語句如下:

string_agg(expression, delimiter) 把表達(dá)式變成一個(gè)數(shù)組

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

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

補(bǔ)充:Postgresql實(shí)現(xiàn)動態(tài)的行轉(zhuǎn)列

問題

在數(shù)據(jù)處理中,常遇到行轉(zhuǎn)列的問題,比如有如下的問題:

有這樣的一張表

"Student_score"表:

姓名 課程 分?jǐn)?shù)
張三 數(shù)學(xué) 83
張三 物理 93
張三 語文 80
李四 語文 74
李四 數(shù)學(xué) 84
李四 物理 94

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

姓名 數(shù)學(xué) 物理 語文
李四 84 94 74
張三 83 93 80

當(dāng)數(shù)據(jù)量比較少時(shí),我們可以在Excel中使用數(shù)據(jù)透視表pivot table的功能實(shí)現(xiàn)這個(gè)需求,但當(dāng)數(shù)據(jù)量較大,或者我們還需要在數(shù)據(jù)庫中進(jìn)行后續(xù)的數(shù)據(jù)處理時(shí),使用數(shù)據(jù)透視表就顯得不那么高效。

下面,介紹如何在Postgresql中實(shí)現(xiàn)數(shù)據(jù)的行轉(zhuǎn)列。

靜態(tài)寫法

當(dāng)我們要轉(zhuǎn)換的值字段是數(shù)值型時(shí),我們可以用SUM()函數(shù):

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

當(dāng)我們要轉(zhuǎn)換的值字段是字符型時(shí),比如我們的表是這樣的:

"Student_grade"表:

姓名 數(shù)學(xué) 物理 語文
張三 優(yōu) 及格
李四 優(yōu) 及格

我們可以用string_agg()函數(shù):

CREATE TABLE Student_grade(姓名 varchar, 課程 varchar, 等級 varchar);
INSERT INTO Student_grade VALUES('張三','數(shù)學(xué)','優(yōu)');
INSERT INTO Student_grade VALUES('張三','物理','良');
INSERT INTO Student_grade VALUES('張三','語文','及格');
INSERT INTO Student_grade VALUES('李四','語文','及格');
INSERT INTO Student_grade VALUES('李四','數(shù)學(xué)','良');
INSERT INTO Student_grade VALUES('李四','物理','優(yōu)');

select 姓名

  ,string_agg((case 課程 when '數(shù)學(xué)' then 等級 end),'') as 數(shù)學(xué)
  ,string_agg((case 課程 when '物理' then 等級 end),'') as 物理
  ,string_agg((case 課程 when '語文' then 等級 end),'') as 語文
from Student_grade
GROUP BY 1

內(nèi)置函數(shù)(半動態(tài))

Postgresql內(nèi)置了tablefunc可實(shí)現(xiàn)pivot table的功能。

語法:

SELECT *
FROM crosstab(
 'select row_name,cat,value
  from table
  order by 1,2')
AS (row_name type, category_1 type, category_2 type, category_3 type, ...);

例如:

SELECT *
FROM crosstab(
 'select 姓名,課程,分?jǐn)?shù)
  from Student_score
  order by 1,2')
AS (姓名 varchar, 數(shù)學(xué) int, 物理 int, 語文 int);

需要注意的是crosstab( text sql) 中的sql語句必須按順序返回row_name, category , value,并且必須聲明輸出的各列的列名和數(shù)據(jù)類型。當(dāng)原表中的cat列有很多不同的值,那我們將會得到一個(gè)有很多列的表,并且我們需要手動聲明每個(gè)列的列名及數(shù)據(jù)類型,顯然這種體驗(yàn)非常不友好。那有沒有更好的方式呢,我們可以通過手動建立存儲過程(函數(shù))實(shí)現(xiàn)。

自建函數(shù)(動態(tài))

動態(tài)的行轉(zhuǎn)列我們通過plpgsql實(shí)現(xiàn),大致的思路如下:

判斷value字段的數(shù)據(jù)類型,如果是數(shù)值型,則轉(zhuǎn)入2.,否則轉(zhuǎn)入3.

對cat列中的每個(gè)distinct值使用sum(case when),轉(zhuǎn)成列

對cat列中的每個(gè)distinct值使用string_agg(case when),轉(zhuǎn)成列

實(shí)現(xiàn)代碼示例:

CREATE or REPLACE FUNCTION 
long_to_wide(
table_name VARCHAR,
row_name VARCHAR,
cat VARCHAR,
value_field VARCHAR)
returns void as
$$
/*
table_name : 表名
row_name : 行名字段
cat : 轉(zhuǎn)換為列名的字段
value_field : 轉(zhuǎn)換為值的字段
*/
DECLARE v_sql text;
arow record;
value_type VARCHAR;
BEGIN
  
  v_sql='
  drop table if exists temp_table;
  CREATE TABLE temp_table as 
  SELECT distinct '||cat||' as col from '||table_name||'
  order by '||cat;
  execute v_sql;
  v_sql='
  SELECT t.typname AS type
  FROM pg_class c
  ,pg_attribute a
  ,pg_type t 
  WHERE c.relname = lower('''||table_name||''') 
  and a.attnum > 0 
  and a.attrelid = c.oid 
  and a.atttypid = t.oid 
  and a.attname='''||value_field||'''
  ORDER BY a.attnum
  '; 
  execute v_sql into value_type;--獲取值字段的數(shù)據(jù)類型
  
  v_sql='select '||row_name;
  IF value_type in ('numeric','int8','int4','int')--判斷值字段是否是數(shù)值型 
    THEN  
    FOR arow in (SELECT col FROM temp_table) loop
    
    v_sql=v_sql||'
        ,sum(case '||cat||' when '''||arow.col||''' then '||value_field||' else 0 end) '||cat||'_'||arow.col;
    end loop;
  ELSE 
    FOR arow in (SELECT col FROM temp_table) loop
    
    v_sql=v_sql||'
    ,string_agg((case '||cat||' when '''||arow.col||''' then '||value_field||' else '''' end),'''') '||cat||'_'||arow.col;
    end loop;
  END IF;
    
  v_sql='
        drop table if exists '||table_name||'_wide;
        CREATE TABLE '||table_name||'_wide as 
        '||v_sql||' 
        from '||table_name||' 
        group by '||row_name||';
        drop table if exists temp_table
        ';
  
  execute v_sql;
end;
$$ LANGUAGE plpgsql;

調(diào)用示例:

SELECT long_to_wide('Student_grade', '姓名','課程', '等級')

生成的表名為Student_grade_wide

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL 實(shí)現(xiàn)列轉(zhuǎn)行問題
  • PostgreSQL實(shí)現(xiàn)交叉表(行列轉(zhuǎn)換)的5種方法示例
  • postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實(shí)現(xiàn)思路

標(biāo)簽:珠海 株洲 蚌埠 來賓 烏海 晉城 衡陽 錦州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列》,本文關(guān)鍵詞  PostgreSQL,實(shí),現(xiàn)將,多行,合并,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列》相關(guān)的同類信息!
  • 本頁收集關(guān)于PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲福利视频免费观看| 久久精品官网| 在线观看一区二区三区视频| 91在线视频九色| 日本韩国精品一区二区在线观看| 人妻91麻豆一区二区三区| 欧美激情一区二区三区p站| 免费影院在线观看一区| 日本韩国精品一区二区在线观看| 免费黄色片视频| 精品欧美一区二区在线观看视频| 一区二区三区四区国产精品| 欧美日韩中文视频| 国产手机精品在线| 欧美日韩中文字幕在线视频| 精品久久久久久亚洲综合网站| 成人性做爰aaa片免费看不忠| 国产精品国产亚洲伊人久久| 亚洲精品在线免费观看视频| 三级网站免费观看| 男人与禽猛交狂配| 成年人网站国产| 粉嫩av一区二区三区免费观看| 日韩不卡在线观看| 国产一区二区三区在线观看网站| 国产精品对白刺激| www.亚洲男人天堂| 夜夜嗨av色一区二区不卡| 中文字幕综合一区| 欧美大奶子在线| 久久精品91久久香蕉加勒比| a级精品国产片在线观看| 天堂网一区二区三区| 亚洲精品77777| 日韩欧美中文视频| 中文字幕第20页| 青青草免费av| 国产99久久精品一区二区| 国产精品一区二区欧美黑人喷潮水 | 国产女人18水真多18精品一级做| 亚洲精品一区二区三区不卡| 高清视频一区二区| 色婷婷av一区二区三区之红樱桃| 国产一级二级av| 久久久久久久一| 国产精品久久久久免费a∨| 亚洲综合欧美激情| 国产精品午夜一区二区| 五月天网站亚洲| 午夜免费在线观看精品视频| 欧美精品一区在线| 欧美久久综合性欧美| 青草热久免费精品视频| 日韩av电影国产| 97人人模人人爽人人少妇| 91精品国产综合久久香蕉的用户体验| 欧美精品videos| 99影视tv| 在线视频观看91| 三级网站在线免费观看| 国产污污视频在线观看| 啪啪一区二区三区| 欧美亚韩一区二区三区| 波多野结衣大片| 成人小视频免费观看| 精品自拍视频在线观看| 国产三级精品三级在线| 日韩国产一区二| 亚洲福利视频久久| 国产精品色午夜在线观看| 一区二区三区四区五区精品 | 极品蜜桃臀肥臀-x88av| 免费一级黄色录像| 懂色av粉嫩av蜜臀av一区二区三区| 一级全黄少妇性色生活片| 国产精品久久久久久福利一牛影视| 香蕉乱码成人久久天堂爱免费| 欧美日本免费一区二区三区| 色综合天天综合给合国产| 欧美成人video| 7777精品久久久久久| 三上悠亚 电影| 国产精品456| 久久久噜噜噜久久久| 女人扒开双腿让男人捅 | 日本一区二区三区在线观看| 在线观看亚洲精品| 爱福利视频一区| 国产精品亚发布| 日韩精品―中文字幕| 视频一区视频二区视频三区高| 亚洲精品国产一区| 美女露出粉嫩尿囗让男人桶| mm131丰满少妇人体欣赏图| 日韩一区欧美二区| 亚洲图片欧美综合| 欧美亚洲一区二区三区四区| 亚洲欧洲99久久| 欧美精品亚洲二区| 亚洲视频精选在线| 欧美精品在线观看播放| 国产精品嫩草影院久久久| 超碰手机在线观看| 夜夜嗨av一区二区三区中文字幕| 精品一区在线播放| 制服.丝袜.亚洲.中文.综合懂色| 久久九九99视频| 亚洲视频免费一区| 久久免费视频在线观看| 视频一区二区综合| 日韩 中文字幕| 中文字幕你懂的| 国产毛片久久久久| 亚洲女人小视频在线观看| 亚洲在线免费观看| 国内国产精品天干天干| 五月激情丁香网| 亚洲综合久久久久| 五月天亚洲精品| 久久99精品视频一区97| 99精品人妻少妇一区二区| 国产高清在线精品| 国产精品视频免费在线| 精品一区在线视频| 亚洲精品成人久久| 99热在线这里只有精品| 无码精品黑人一区二区三区 | 国产福利精品导航| 日韩精品在线一区二区| 亚洲xxx自由成熟| 中文字幕 91| 91免费公开视频| 无码精品在线观看| 在线激情影院一区| 亚洲欧美一区二区三区不卡| 蜜臀尤物一区二区三区直播| 依依成人精品视频| 国产91精品久久久久久久| 91精品国产色综合| 中文幕无线码中文字蜜桃| 91小视频免费看| 久久青青草综合| 天天干天天色天天| 国产精品91在线观看| 国产91av在线播放| 亚洲一二在线观看| 亚洲一级片av| 国产一区999| 亚洲国产精品99| a级黄色片网站| 午夜精品一区二| 亚洲第一av色| 亚洲国产精品小视频| 亚洲一区二区久久久久久久| 日本精品人妻无码77777| 欧美日韩亚洲另类| 国产自偷自偷免费一区 | 午夜精品一区二区三| 亚洲欧美激情插| 日本久久久a级免费| 欧美一级片免费看| 色先锋久久av资源部| 国产在线精品一区二区三区| 人妻换人妻a片爽麻豆| 97久久精品人人做人人爽50路| 自拍偷拍亚洲色图欧美| 97久久久精品综合88久久| 亚洲第一页在线视频| 美女视频黄免费的久久 | 久久久久成人精品免费播放动漫| 又嫩又硬又黄又爽的视频| 中文字幕日韩欧美一区二区三区| 98精品在线视频| 久久精品老司机| 国产在线视频精品一区| 日韩亚洲欧美成人一区| 日本在线免费观看一区| 国内精品久久久久影院薰衣草 | 欧美午夜不卡视频| 日本一区免费看| 国产一区二区三区视频播放| 精品一区二区三区不卡 | 成人av影视在线| 久久久亚洲综合| 午夜激情av在线| 884aa四虎影成人精品一区| 鲁丝一区二区三区| 亚洲日韩欧美视频一区| 久久久久久久久免费看无码| 黄色av网站免费观看| 正在播放一区二区| 蜜臀视频一区二区三区| 国产深喉视频一区二区| 欧美一区二区三区男人的天堂| 久久免费一区| 中文文字幕一区二区三三| 在线观看免费视频综合| 国产裸体写真av一区二区| 在线观看色网站| 亚洲精品在线免费播放| 性久久久久久久久久| 亚洲一区影音先锋| 欧美在线视频免费播放| 少妇丰满尤物大尺度写真| 一区在线观看免费| 自拍视频第一页| 亚洲成人免费观看| 国产一区二区精品免费| 99久久国产免费| 国内外成人免费激情在线视频网站| 99中文字幕| 日本中文字幕二区| 色狠狠色狠狠综合| 五月婷婷六月丁香激情| 午夜视频一区二区| 亚洲一区二三| 午夜福利一区二区三区| 国产91在线播放九色快色| 欧美一区二区在线观看视频| 国产精品视频一区二区三区四区五区| 日韩视频国产视频| 日本道在线观看| 俄罗斯精品一区二区三区| 国产欧美日韩在线视频| 男女午夜激情视频| 亚洲无人区一区| 日韩一区二区高清视频| 中文字幕在线观看一区| 日本大片免费看| 亚洲欧美综合在线精品| 先锋影音男人资源| 精品在线播放免费| 国产精品福利无圣光在线一区| 国产精品亚洲一区二区三区在线| 女同性恋一区二区| 91麻豆成人久久精品二区三区| 日韩av不卡播放| 久久综合丝袜日本网| 91精品中文在线| 免费在线观看国产精品| 国产成人精品av在线| 你懂的网站在线| 最新不卡av| 色悠悠国产精品| 99久久精品国产麻豆演员表| 中文字幕55页| 日韩免费高清在线观看| 成人动漫精品一区二区| 伦理片一区二区| 在线观看中文字幕不卡| 精品人妻伦九区久久aaa片| 亚洲欧洲午夜一线一品| 91视频在线视频| 91中文在线视频| 成人av一区二区三区| 久久久久久三级| 亚洲欧美综合色| 欧美 日韩 国产一区| 中文字幕国产一区二区| 国产亚洲精品熟女国产成人| 精品中文字幕在线观看| 国产熟女一区二区丰满| 日产中文字幕在线精品一区| 中文字幕不卡在线观看| 国产精品久久久久久久久| 国产麻豆一精品一av一免费| 性猛交ⅹ×××乱大交| 亚洲精品久久久久国产| 婷婷五月综合久久中文字幕| 国产成人av片| 久久婷婷人人澡人人喊人人爽| 亚洲丁香婷深爱综合| 99久久亚洲精品日本无码| 亚洲精品在线观看免费| 欧美一级午夜免费电影| 欧美xxxooo| 久久久久久av| 日本大胆欧美人术艺术动态| 久久国产精品高清| 亚洲综合视频在线观看| 欧美肥妇bbwbbw| 欧美r级在线观看| 免费视频网站www| 77777亚洲午夜久久多人| 国产精品欧美精品| 精品国产乱子伦| 国产一区二区免费在线观看| 国产偷国产偷亚洲高清人白洁| 色噜噜在线观看| 久久视频在线直播| 国产午夜小视频| 久久精品国产清自在天天线| 蜜臀av一区二区在线免费观看| 日韩精品久久一区二区三区| 欧美色网站导航| 91热门视频在线观看| 在线观看日韩中文字幕| 人妻熟女一二三区夜夜爱| 国内偷自视频区视频综合| 亚洲免费电影在线| 欧性猛交ⅹxxx乱大交| 91热这里只有精品| 俺去啦;欧美日韩| 久久99精品久久久久久动态图 | 国产二区国产一区在线观看| 欧美牲交a欧美牲交aⅴ免费真| 久久精品99久久久久久久久| av官网在线观看| 日韩精品另类天天更新| 色悠悠亚洲一区二区| 91亚洲精品国偷拍自产在线观看 | 青青草国产精品视频| 亚洲欧美视频一区| 中文字幕天堂av| 岛国视频一区| 欧美xxxx老人做受| 日本伊人色综合网| 97成人资源站| 无套白嫩进入乌克兰美女| 日韩中文字幕第一页| 亚洲乱码在线观看| 色婷婷.com| 欧美专区一二三| 7777免费精品视频| 亚洲国产天堂久久综合网| 亚洲精品欧美专区| 国产女人高潮时对白| 在线观看亚洲免费视频| 亚洲综合第一页| 国产精品卡一卡二卡三| 99久久精品久久亚洲精品| 国产欧美日韩小视频| 久久国产天堂福利天堂| 国产精品国产三级国产aⅴ中文 | 黄色a级片免费看| 国产精品中文久久久久久久| aaa国产一区| 99精品人妻无码专区在线视频区| 亚洲 欧美 日韩在线| 亚洲综合色av| 欧美成人乱码一区二区三区| 免费观看的毛片| 亚洲国产欧美视频| 天堂资源在线亚洲视频| 亚洲精品二三区| 国产精品乱人伦中文| 姑娘第5集在线观看免费好剧| 大桥未久一区二区| 亚洲色图17p| 91在线看国产| www.亚洲激情| 午夜久久福利视频| 亚洲黄色一区二区三区| 久久激情视频免费观看| 五月综合激情网| 国产91丝袜在线观看| 国产又粗又猛又色| 欧美一级高清免费| 欧美精品乱码久久久久久按摩| 国产欧美一区二区在线观看| 天天操天天插天天射| 国产青青草视频| 国产又粗又黄又爽的视频| 亚洲天堂网在线视频| 亚洲欧美偷拍一区| 99久久婷婷国产综合| 在线视频一二区| 无码人妻aⅴ一区二区三区日本| 欧美久久久久久久| 国产精品午夜国产小视频| 91久久精品网| 久久久精品影视| 一级黄色片大全| 日本50路肥熟bbw| 三年中国中文在线观看免费播放| 久久91超碰青草是什么| 4438x成人网最大色成网站| 免费久久精品视频| 二区三区四区视频| 日本中文字幕在线视频观看| 亚洲综合社区网| 久久韩剧网电视剧| 欧美极品少妇xxxxⅹ裸体艺术| 日韩一区二区三区国产| 亚洲成人自拍网| 久久久久久99久久久精品网站| 黄色av免费观看| 91蜜桃视频在线观看| 国产一线在线观看| 欧美日韩在线精品一区二区三区| 亚洲人线精品午夜| 日韩欧美成人激情| 欧美视频在线观看免费| 99re热这里只有精品免费视频| 国产91高潮流白浆在线麻豆 | 丰满女人性猛交| 免费cad大片在线观看| 农村寡妇一区二区三区| 欧美极品第一页| 久久精品国产亚洲精品| 欧美日韩一区二区免费在线观看| 中文字幕一区二区三区色视频| 国产精选一区二区三区| 在线观看亚洲黄色| 久久久久久蜜桃| 在线 丝袜 欧美 日韩 制服| 男人操女人免费| 色综合电影网| 精品综合久久| 国产 高清 精品 在线 a|