sql mysql 列轉行(轉為多個字段)

2021-10-02 04:33:52 字數 1541 閱讀 5224

建表語句:

create table tb_score1(

id int(11) not null auto_increment,

userid varchar(20) not null comment '使用者id',

cn_score double comment '語文成績',

math_score double comment '數學成績',

en_score double comment '英語成績',

po_score double comment '政治成績',

primary key(id)

)engine = innodb default charset = utf8;

insert into tb_score1(userid,cn_score,math_score,en_score,po_score) values ('001',90,92,80,0);

insert into tb_score1(userid,cn_score,math_score,en_score,po_score) values ('002',88,90,75.5,0);

insert into tb_score1(userid,cn_score,math_score,en_score,po_score) values ('003',70,85,90,82);

查詢資料表中的內容(即轉換前的結果):

先看一下轉換後的效果:

本質是將userid的每個科目分數分散成一條記錄顯示出來。

select userid,'語文' as course,cn_score as score from tb_score1

union all

select userid,'數學' as course,math_score as score from tb_score1

union all

select userid,'英語' as course,en_score as score from tb_score1

union all

select userid,'政治' as course,po_score as score from tb_score1

order by userid

這裡將每個userid對應的多個科目的成績查出來,通過union all將結果集加起來,達到上圖的效果。

附:union與union all的區別(摘):

1.對重複結果的處理:union會去掉重覆記錄,union all不會;

2.對排序的處理:union會排序,union all只是簡單地將兩個結果集合並;

3.效率方面的區別:因為union 會做去重和排序處理,因此效率比union all慢很多;

hive 列轉行 HQL 行轉列,列轉行

1 相關函式 concat string a col,string b col 返回輸入字串連線後的結果,支援任意個輸入字串 concat ws separator,str1,str2,它是乙個特殊形式的 concat 第乙個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 n...

python 列轉行 SQL 行轉列,列轉行

sql 行轉列,列轉行 行列轉換在做報表分析時還是經常會遇到的,今天就說一下如何實現行列轉換吧。行列轉換就是如下圖所示兩種展示形式的互相轉換 行轉列假如我們有下表 select from student pivot sum score for subject in 語文,數學,英語 通過上面 sql...

sql 列轉行(將一條記錄(橫向)轉為一列顯示)

sql 列轉行 將一條查詢結果,本開始橫向的一條記錄,想讓他顯示為一列,此處查詢了130項因子資料,sql語句看著嚇人,只看一兩行就ok 轉換結果 sql語句 select b.c1 as climate value from climate index b where tm 195101 unio...