建表語句:
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...