SQL面試題之行列轉換

2021-08-11 08:29:49 字數 2673 閱讀 7168

建表語句:

set foreign_key_checks=0;

-- ----------------------------

-- table structure for tb

-- ----------------------------

drop

table

ifexists

`tb`;

create

table

`tb` (

`姓名`

varchar(10) default

null,

`課程`

varchar(10) default

null,

`分數`

int(11) default

null

) engine=innodb default charset=utf8;

-- ----------------------------

-- records of tb

-- ----------------------------

insert

into

`tb`

values ('李四', '物理', '22');

insert

into

`tb`

values ('李四', '數學', '53');

insert

into

`tb`

values ('張三', '物理', '35');

insert

into

`tb`

values ('李四', '語文', '52');

insert

into

`tb`

values ('張三', '語文', '52')

表結構如下:

實現如下效果:

查詢語句如下:

select

姓名,max(

case

when 課程 = '語文'

then

分數else

0end

) 語文,

max(

case

when 課程 = '數學'

then

分數else

0end

) 數學,

max(

case

when 課程 = '物理'

then

分數else

0end

) 物理

from

tbgroup

by 姓名;

建表語句:

drop

table

ifexists

`tb2`;

create

table

`tb2` (

`姓名`

varchar(10) default

null,

`語文`

int(11) default

null,

`數學`

int(11) default

null,

`物理`

int(11) default

null

) engine=innodb default charset=utf8;

-- ----------------------------

-- records of tb2

-- ----------------------------

insert

into

`tb2`

values ('張三', '21', '212', '111');

insert

into

`tb2`

values ('李四', '2', '212', '2');

表結構如下:

實現如下效果:

查詢語句:

select

姓名,'語文'

as 課程,

語文 as 分數

from

tb2union

allselect

姓名,'數學'

as 課程,

數學 as 分數

from

tb2union

allselect

姓名,'物理'

as 課程,

物理 as 分數

from

tb2

總結:以上在實際開發應用中使用不是很好,在這只是做個記錄,個人覺得實際開發中在業務中實現行列轉換。

hive行列轉換面試題

一 行轉列的使用 問題 hive如何將 a b 1 a b 2 a b 3 c d 4 c d 5 c d 6 變為 a b 1,2,3 c d 4,5,6 資料 test.txt a b 1 a b 2 a b 3 c d 4 c d 5 c d 6 答案 1.建表 drop table tmp ...

SQL 行列轉置 常見面試題(一)

常見面試題如下 先來分析一下 第一步將course 裡面的課程轉換為列標題,常用 case when 就能解決。select 學號 max case when 課程號 0001 then 成績 end as 語文 max case when 課程號 0002 then 成績 end as 數學 ma...

sql行列轉換

問題 如果上述兩表互相換一下 即表結構和資料為 姓名 語文 數學 物理 張三 74 83 93 李四 74 84 94 想變成 得到如下結果 姓名 課程 分數 李四 語文 74 李四 數學 84 李四 物理 94 張三 語文 74 張三 數學 83 張三 物理 93 create table tb ...