MySQL面試 二維表轉置(寬窄轉換)

2021-10-07 13:26:30 字數 3068 閱讀 8757

先看看表長什麼樣子

select * from student;

±-----±-----±----------±------+

| name | cno | cource | score |

±-----±-----±----------±------+

| s1 | c1 | 資料結構 | 91 |

| s1 | c2 | 作業系統 | 81 |

| s1 | c3 | 微積分 | 71 |

| s2 | c1 | 資料結構 | 92 |

| s2 | c2 | 作業系統 | 82 |

| s2 | c3 | 微積分 | 72 |

| s3 | c1 | 資料結構 | 93 |

| s3 | c2 | 作業系統 | 83 |

| s3 | c3 | 微積分 | 73 |

±-----±-----±----------±------+

建表語句放到下面:

create table student(

name varchar(10),

cno varchar(2),

cource varchar(10),

score float(2)

)insert into student values(『s1』,『c1』,'資料結構 ',『91』) ;

insert into student values(『s1』,『c2』,『作業系統』,『81』) ;

insert into student values(『s1』,『c3』,『微積分』,『71』) ;

insert into student values(『s2』,『c1』,『資料結構』,『92』) ;

insert into student values(『s2』,『c2』,『作業系統』,『82』) ;

insert into student values(『s2』,『c3』,『微積分』,『72』) ;

insert into student values(『s3』,『c1』,『資料結構』,『93』) ;

insert into student values(『s3』,『c2』,『作業系統』,『83』) ;

insert into student values(『s3』,『c3』,『微積分』,『73』) ;

然後想要求下表的樣子:

±-----±---------±---------±-------+

| 姓名 | 資料結構 | 作業系統 | 微積分 |

±-----±---------±---------±-------+

| s1 | 91 | 81 | 71 |

| s2 | 92 | 82 | 72 |

| s3 | 93 | 83 | 73 |

±-----±---------±---------±-------+

轉置語句如下:

select s11.name 「姓名」, s11.score 「資料結構」,s12.score 「作業系統」, s13.score "微積分"from

(select name, score from student where cno = 『c1』) as s11,

(select name, score from student where cno = 『c2』) as s12,

(select name, score from student where cno = 『c3』)as s13

where s11.name = s12.name

and s12.name = s13.name

先看看原表長什麼樣子

select * from idtemp;

±-----±------±--------±--------±--------+

| id | token | column1 | column2 | column3 |

±-----±------±--------±--------±--------+

| 1 | aaa | 1234 | abcd | mnop |

| 2 | bbb | 5678 | efgh | qrst |

| 3 | ccc | 9101 | ijkl | uvwx |

±-----±------±--------±--------±--------+

表建立語句

create table idtemp (

id varchar(10),

token varchar(10),

column1 varchar(10),

column2 varchar(10),

column3 varchar(10)

)表賦值語句

insert into idtemp values(『1』,『aaa』,'1234 ',『abcd』,『mnop』) ;

insert into idtemp values(『2』,『bbb』,'5678 ',『efgh』,『qrst』) ;

insert into idtemp values(『3』,『ccc』,'9101 ',『ijkl』,『uvwx』) ;

想要展開成這個表

id token columns

1 aaa 1234

1 aaa abcd

1 aaa mnop

2 bbb 5678

2 bbb efgh

2 bbb qrst

3 ccc 9101

3 ccc ijkl

3 ccc uvwx

語句如下(會報錯,待修改):

solution using union:

select id

,token

,column1 as columns

from current_table

union

select id

,token

,column2 as columns

from current_table

union

select id

,token

,column3 as columns

from current_table

二維陣列轉置

輸入乙個n行m列的陣列,輸出他的轉置,具體來說 輸出的第i行第j個數字,應是輸入的第j行第i個數字。1 n 100 1 m 100 1 aij 1000 input 第一行兩個整數n,m表示陣列的行數和列數 接下來n行,每行m個整數表示陣列內容。output 第一行先輸出m,n。接下來輸出轉置的結果...

二維陣列的轉置

首先我們預設 表示轉置符號那麼行列轉置有 0 0 0 0 0 1 1 0 0 2 2 0 1 0 0 1 1 1 1 1 1 2 2 1 2 0 0 2 2 1 1 2 2 2 2 2 1.我們觀察到行列轉置在表面上是行列交換 2.但是我們發現,對角線是不用處理的所以有 0 0 0 0 1 1 1 ...

一維表轉二維表(mysql)

例子資料 drop table ifexists tmp0103.temp test create table tmp0103.temp test id int 11 not null auto increment,class varchar 255 default null,score doubl...