在MySQL中将行动态地转换为列-每个用户的页面排名

问题描述 投票:-1回答:1

我有以下数据框。我想创建一个新表,其中每个用户的浏览次数最多为4个页面(页面和浏览次数)。

因此,我需要转置以下列:页面,数量和等级。

请注意,要排序的变量是等级,不一定所有名称都在所有页面中。必要地必须有4列。

drop table sessions;
CREATE TABLE IF NOT EXISTS sessions (    
    id int(11),
    name varchar(10),
    page varchar(10),
    quantity int(11),
    rank int(11)
);


insert into sessions values (1,'joan','home',15,1);
insert into sessions values (1,'joan','search',8,2);
insert into sessions values (1,'joan','vip',4,3);
insert into sessions values (1,'joan','checkout',2,4);
insert into sessions values (2,'fill','home',20,1);
insert into sessions values (2,'fill','vip',2,2);
insert into sessions values (3,'mery','search',10,1);
insert into sessions values (3,'mery','checkout',7,2);
insert into sessions values (3,'mery','home',5,3);


id name page quantity rank
1. joan home 15 1
1. joan search 8 2
1 joan vip 4 3
1 joan checkout 2 4
2 fill home 20 1 
2 fill vip 2 2
3 mery search 10 1
3 mery checkout 7 2
3 mery home 5 3

最终期望输出。

id  name  page1    quantity1 page2     quantity2 page3 quantity3 page4     quantity4
1   joan  home     15        search    8         vip   4         checkout  2
2   fill  home     20        vip       2       
3   mery  search   10        checkout  7         home  5
mysql pivot transpose rank
1个回答
0
投票

您可以使用条件聚合:

select
    id,
    name,
    max(case when rank = 1 then page     end) page1,
    max(case when rank = 1 then quantity end) quantity1,
    max(case when rank = 2 then page     end) page2,
    max(case when rank = 2 then quantity end) quantity2,
    max(case when rank = 3 then page     end) page3,
    max(case when rank = 3 then quantity end) quantity3,
    max(case when rank = 4 then page     end) page4,
    max(case when rank = 4 then quantity end) quantity4
from sessions
group by id, name

Demo on DB Fiddle

id |名称|第1页|数量1 |第2页|数量2 |第3页数量3 |第4页数量4-:| :- :----- | --------:| :------- | --------:| :---- | --------:| :------- | --------:1 |琼|主页| 15 |搜索| 8 |贵宾| 4 |结帐| 22 |填充|主页| 20 |贵宾| 2 |  |  |  | null3 |米利|搜索| 10 |结帐| 7 |主页| 5 |  | null
© www.soinside.com 2019 - 2024. All rights reserved.