1、同比环比

  1. ---- 练习 同比环比
  2. create table sales_amount
  3. (years varchar2(20),
  4. months varchar2(20),
  5. sales_amount number
  6. );
  7. insert into sales_amount values('2016','01',100);
  8. insert into sales_amount values('2016','02',110);
  9. insert into sales_amount values('2016','03',140);
  10. insert into sales_amount values('2016','04',150);
  11. insert into sales_amount values('2016','05',190);
  12. insert into sales_amount values('2016','06',300);
  13. insert into sales_amount values('2016','07',450);
  14. insert into sales_amount values('2016','08',580);
  15. insert into sales_amount values('2016','09',470);
  16. insert into sales_amount values('2016','10',340);
  17. insert into sales_amount values('2016','11',240);
  18. insert into sales_amount values('2016','12',180);
  19. insert into sales_amount values('2017','01',130);
  20. insert into sales_amount values('2017','02',150);
  21. insert into sales_amount values('2017','03',190);
  22. insert into sales_amount values('2017','04',250);
  23. insert into sales_amount values('2017','05',390);
  24. insert into sales_amount values('2017','06',800);
  25. insert into sales_amount values('2017','07',950);
  26. insert into sales_amount values('2017','08',380);
  27. insert into sales_amount values('2017','09',570);
  28. insert into sales_amount values('2017','10',740);
  29. insert into sales_amount values('2017','11',340);
  30. insert into sales_amount values('2017','12',680);
  31. COMMIT;
  32. ---- 目标表
  33. 展示效果一
  34. 1月销售额 2月销售额 3月销售额 ...... 12月销售额
  35. 2017 100 110 140 180
  36. 展示效果二
  37. 1季度销售额 2季度销售额 3季度销售额 4季度销售额
  38. 求:月增长率 季度增长率?
  39. -- 环比 相邻月份
  40. 举例
  41. (二月份销售额 - 一月份销售额)/一月份销售额
  42. -- 同比 相邻年份的相同月份
  43. (2017 一月份销售额 - 2016 一月份销售额) / 2016 一月份销售额
  44. -------------------------------------------------------------
  45. -- 行转列
  46. -- deoce 月度展示
  47. select s.years,
  48. sum(decode(s.months, '01', s.sales_amount, 0)) as m1,
  49. sum(decode(s.months, '02', s.sales_amount, 0)) as m2,
  50. sum(decode(s.months, '03', s.sales_amount, 0)) as m3,
  51. sum(decode(s.months, '04', s.sales_amount, 0)) as m4,
  52. sum(decode(s.months, '05', s.sales_amount, 0)) as m5,
  53. sum(decode(s.months, '06', s.sales_amount, 0)) as m6,
  54. sum(decode(s.months, '07', s.sales_amount, 0)) as m7,
  55. sum(decode(s.months, '08', s.sales_amount, 0)) as m8,
  56. sum(decode(s.months, '09', s.sales_amount, 0)) as m9,
  57. sum(decode(s.months, '10', s.sales_amount, 0)) as m10,
  58. sum(decode(s.months, '11', s.sales_amount, 0)) as m11,
  59. sum(decode(s.months, '12', s.sales_amount, 0)) as m12
  60. from sales_amount s
  61. group by s.years;
  62. -- case when 季度展示
  63. select s.years
  64. ,sum(case when s.months in('01','02','03') then s.sales_amount else 0 end ) as Q1
  65. ,sum(case when s.months in('04','05','06') then s.sales_amount else 0 end ) as Q2
  66. ,sum(case when s.months in('07','08','09') then s.sales_amount else 0 end ) as Q3
  67. ,sum(case when s.months in('10','11','12') then s.sales_amount else 0 end ) as Q4
  68. from sales_amount s
  69. group by s.years;
  70. -- 季度环比 相邻
  71. -- Q4 下移一行 分析函数 lag
  72. with tmp as
  73. (select s.years
  74. ,sum(case when s.months in('01','02','03') then s.sales_amount else 0 end ) as Q1
  75. ,sum(case when s.months in('04','05','06') then s.sales_amount else 0 end ) as Q2
  76. ,sum(case when s.months in('07','08','09') then s.sales_amount else 0 end ) as Q3
  77. ,sum(case when s.months in('10','11','12') then s.sales_amount else 0 end ) as Q4
  78. from sales_amount s
  79. group by s.years)
  80. select t.*
  81. ,lag(Q4) over(partition by null order by years) as new_Q4
  82. from tmp t;
  83. --
  84. with tmp as
  85. (select s.years
  86. ,sum(case when s.months in('01','02','03') then s.sales_amount else 0 end ) as Q1
  87. ,sum(case when s.months in('04','05','06') then s.sales_amount else 0 end ) as Q2
  88. ,sum(case when s.months in('07','08','09') then s.sales_amount else 0 end ) as Q3
  89. ,sum(case when s.months in('10','11','12') then s.sales_amount else 0 end ) as Q4
  90. from sales_amount s
  91. group by s.years)
  92. select t.years
  93. ,(t.Q1 - lag(Q4) over(partition by null order by years))/lag(Q4) over(partition by null order by years) as Q1_HB_RATE
  94. ,(t.Q2 - t.Q1)/t.Q1 as Q2_HB_RATE
  95. ,(t.Q3 - t.Q2)/t.Q2 as Q3_HB_RATE
  96. ,(t.Q4 - t.Q3)/t.Q3 as Q4_HB_RATE
  97. from tmp t;
  98. -- 月份环比 相邻
  99. with tmp as(
  100. select s.years
  101. ,sum(decode(s.months,'01',s.sales_amount,0)) as m1
  102. ,sum(decode(s.months,'02',s.sales_amount,0)) as m2
  103. ,sum(decode(s.months,'03',s.sales_amount,0)) as m3
  104. ,sum(decode(s.months,'04',s.sales_amount,0)) as m4
  105. ,sum(decode(s.months,'05',s.sales_amount,0)) as m5
  106. ,sum(decode(s.months,'06',s.sales_amount,0)) as m6
  107. ,sum(decode(s.months,'07',s.sales_amount,0)) as m7
  108. ,sum(decode(s.months,'08',s.sales_amount,0)) as m8
  109. ,sum(decode(s.months,'09',s.sales_amount,0)) as m9
  110. ,sum(decode(s.months,'10',s.sales_amount,0)) as m10
  111. ,sum(decode(s.months,'11',s.sales_amount,0)) as m11
  112. ,sum(decode(s.months,'12',s.sales_amount,0)) as m12
  113. from sales_amount s
  114. group by s.years)
  115. select t.years
  116. ,(t.m1 - lag(m12) over(partition by null order by years))/lag(m12) over(partition by null order by years) as M1_HB_RATE
  117. ,(t.m2 - t.m1)/t.m1 as M2_HB_RATE
  118. ,(t.m3 - t.m2)/t.m2 as M3_HB_RATE
  119. ,(t.m4 - t.m3)/t.m3 as M4_HB_RATE
  120. ,(t.m5 - t.m4)/t.m4 as M5_HB_RATE
  121. ,(t.m6 - t.m5)/t.m5 as M6_HB_RATE
  122. ,(t.m7 - t.m6)/t.m6 as M7_HB_RATE
  123. ,(t.m8 - t.m7)/t.m7 as M8_HB_RATE
  124. ,(t.m9 - t.m8)/t.m8 as M9_HB_RATE
  125. ,(t.m10 - t.m9)/t.m9 as M10_HB_RATE
  126. ,(t.m11 - t.m10)/t.m10 as M11_HB_RATE
  127. ,(t.m12 - t.m11)/t.m11 as M12_HB_RATE
  128. from tmp t;
  129. -- 同比 季度
  130. with tmp as
  131. (select s.years
  132. ,sum(case when s.months in('01','02','03') then s.sales_amount else 0 end ) as Q1
  133. ,sum(case when s.months in('04','05','06') then s.sales_amount else 0 end ) as Q2
  134. ,sum(case when s.months in('07','08','09') then s.sales_amount else 0 end ) as Q3
  135. ,sum(case when s.months in('10','11','12') then s.sales_amount else 0 end ) as Q4
  136. from sales_amount s
  137. group by s.years)
  138. select t.years
  139. ,(t.Q1 - lag(Q1) over(partition by null order by years))/lag(Q1) over(partition by null order by years) as Q1_TB_RATE
  140. ,(t.Q2 - lag(Q2) over(partition by null order by years))/lag(Q2) over(partition by null order by years) as Q1_TB_RATE
  141. ,(t.Q3 - lag(Q3) over(partition by null order by years))/lag(Q3) over(partition by null order by years) as Q1_TB_RATE
  142. ,(t.Q4 - lag(Q4) over(partition by null order by years))/lag(Q4) over(partition by null order by years) as Q1_TB_RATE
  143. from tmp t;
  144. -- 同比 月份
  145. with tmp as(
  146. select s.years
  147. ,sum(decode(s.months,'01',s.sales_amount,0)) as m1
  148. ,sum(decode(s.months,'02',s.sales_amount,0)) as m2
  149. ,sum(decode(s.months,'03',s.sales_amount,0)) as m3
  150. ,sum(decode(s.months,'04',s.sales_amount,0)) as m4
  151. ,sum(decode(s.months,'05',s.sales_amount,0)) as m5
  152. ,sum(decode(s.months,'06',s.sales_amount,0)) as m6
  153. ,sum(decode(s.months,'07',s.sales_amount,0)) as m7
  154. ,sum(decode(s.months,'08',s.sales_amount,0)) as m8
  155. ,sum(decode(s.months,'09',s.sales_amount,0)) as m9
  156. ,sum(decode(s.months,'10',s.sales_amount,0)) as m10
  157. ,sum(decode(s.months,'11',s.sales_amount,0)) as m11
  158. ,sum(decode(s.months,'12',s.sales_amount,0)) as m12
  159. from sales_amount s
  160. group by s.years)
  161. select t.years
  162. ,(t.m1 - lag(m1) over(partition by null order by years))/lag(m1) over(partition by null order by years) as M1_TB_RATE
  163. ,(t.m2 - lag(m2) over(partition by null order by years))/lag(m2) over(partition by null order by years) as M2_TB_RATE
  164. ,(t.m3 - lag(m3) over(partition by null order by years))/lag(m3) over(partition by null order by years) as M3_TB_RATE
  165. ,(t.m4 - lag(m4) over(partition by null order by years))/lag(m4) over(partition by null order by years) as M4_TB_RATE
  166. ,(t.m5 - lag(m5) over(partition by null order by years))/lag(m5) over(partition by null order by years) as M5_TB_RATE
  167. ,(t.m6 - lag(m6) over(partition by null order by years))/lag(m6) over(partition by null order by years) as M6_TB_RATE
  168. ,(t.m7 - lag(m7) over(partition by null order by years))/lag(m7) over(partition by null order by years) as M7_TB_RATE
  169. ,(t.m8 - lag(m8) over(partition by null order by years))/lag(m8) over(partition by null order by years) as M8_TB_RATE
  170. ,(t.m9 - lag(m9) over(partition by null order by years))/lag(m9) over(partition by null order by years) as M9_TB_RATE
  171. ,(t.m10 - lag(m10) over(partition by null order by years))/lag(m10) over(partition by null order by years) as M10_TB_RATE
  172. ,(t.m11 - lag(m11) over(partition by null order by years))/lag(m11) over(partition by null order by years) as M11_TB_RATE
  173. ,(t.m12 - lag(m12) over(partition by null order by years))/lag(m12) over(partition by null order by years) as M12_TB_RATE
  174. from tmp t;