1:SALES表的表数据如下:
| year | month | amt | 
|---|---|---|
| 2021 | 04 | 100 | 
| 2021 | 05 | 200 | 
| 2020 | 04 | 400 | 
| 2020 | 05 | 150 | 
| 2019 | 04 | 300 | 
| 2019 | 05 | |
| 2020 | 04 | 50 | 
需求:请写出可以得到以下的结果SQL
| year | 4月份金额 | 5月份金额 | 总金额 | 环比(%) | 
|---|---|---|---|---|
| 2020 | 150 | 150 | 600 | |
| 2021 | 100 | 200 | 300 | 
建表语句:
create table sales(year int ,month string,amt int);
insert into sales values
(2021,'04',100),
(2021,'05',200),
(2020,'04',400),
(2020,'05',150),
(2019,'04',300),
(2019,'05',null),
(2020,'04',50); 
分析思路:要实现行转列无非就是===>>>带条件的聚合
--行转列套路===>>>带条件的聚合
select year,
       sum(if(month='04',amt,0)) as amt4,
       sum(if(month='05',amt,0)) as amt5,
       sum(amt) as sum_all 
最终SQL:
--行转列的常规套路就是group by+带条件(case when或if)的聚合
select year,
       amt4, amt5, sum_all,
       round((amt5-amt4)/amt4,4)*100 || '%'  as rate
       from
(select year,
       sum(if(month='04',amt,0)) as amt4,
       sum(if(month='05',amt,0)) as amt5,
       sum(amt) as sum_all
from sales group by  year) t;
 
结果:











