mysql把結果變橫表 mysql 橫表與縱表互轉

2021-10-13 06:35:48 字數 1605 閱讀 4450

一、認識橫表與縱表:

橫表就是普通的建表方式,如乙個表結構為: 主鍵、欄位1、欄位2、欄位3。。。

如果變成縱表後,則表結構為: 主鍵、字段**、字段值,字段**則為字段1、欄位2、欄位3。

縱表對從資料庫到記憶體的對映效率是有影響的,但細一點說也要一分為二:

縱表的初始對映要慢一些; 縱表的變更的對映可能要快一些,如果只是改變了單個欄位時,畢竟橫表字段比縱表要多很多。

1、建立縱表結構 table_a:

create table table_a

姓名 varchar(20),

課程 varchar(20),

成績 int

2、插入縱表table_a測試資料:

insert into table_a(姓名,課程,成績) values('張三','語文',60);

insert into table_a(姓名,課程,成績) values('張三','數學',70);

insert into table_a(姓名,課程,成績) values('張三','英語',80);

insert into table_a(姓名,課程,成績) values('李四','語文',90);

insert into table_a(姓名,課程,成績) values('李四','數學',100);

3、建立橫表結構 table_b:

create table table_b

姓名 varchar(20),

語文 int,

數學 int,

英語 int

4、插入橫表table_b測試資料:

insert into table_b(姓名,語文,數學,英語) values('張三',60,70,80);

insert into table_b(姓名,語文,數學,英語) values('李四',90,100,0);

二、縱表變橫表

縱表結構 table_a --> 橫表結構 table_b

方法:聚合函式[max或sum]配合case語句

insert into table_b

select 姓名,

sum(case 課程 when '語文' then 成績 else 0 end) as 語文,

sum(case 課程 when '數學' then 成績 else 0 end) as 數學,

sum(case 課程 when '英語' then 成績 else 0 end) as 英語

from table_a

group by 姓名

三、橫表變縱表

橫表結構 table_b --> 縱表結構 table_a

方法:union all

insert into table_a

select 姓名, '語文' as 課程, 語文 as 成績 from table_b

union all

select 姓名, '數學' as 課程, 數學 as 成績 from table_b

union all

select 姓名, '英語' as 課程, 英語 as 成績 from table_b

order by 姓名,課程 desc

以上。

Word橫表變豎表

在用word2010設計資料表時發現欄位太多了,在正常的頁面大小下橫表空間不夠,於是想將橫表轉為豎表,這樣欄位再多也不怕。可以找遍了選單功能項也沒發現有 橫豎轉換的,在網上查了,說word中複製貼上到excel,貼上時選擇 選擇性貼上 然後 轉置 注意分兩步操作,第一步將word的 原樣複製到exc...

HIVE縱表變橫表

有這這樣一張表t buy buyer time hongbao asc 使用者id 次序 購買時間 25560 1 1325345254 25560 2 1331043510 25560 3 1331999999 25720 1 1320381121 25720 2 1320461154 25720...

SQL 豎表變橫表

豎表變橫表的情況,大多數是要將資料分組,然後用一行顯示所有組的資料。比如 支付方式 支付金額 支付寶100 20支付寶 5060 那麼變橫表後,就變成 支付寶150 80這裡介紹另一種情況,使用場景是,把按 key value 形式儲存的資料,用 key 的各種值作為表頭,顯示在 ui 上。直接看 ...