sql - highest percentage growth -
i using postgres 9.6 , pgadmin 4.
my question follows:
which segment had highest percentage growth between 2014 , 2015? how much?
this join between 2 tables
table 1: case_data_order
- create_timestamp- (timestamp) looks example: 2014-01-01 10:12:20
- purchase_amount- (bigint) amount purchase
- id - (numeric)-an id single purchase
- merchant_id - same below.
table 2: case_data_merchant
- merchant_category (text) - difference segments are
- merchant_id-(bigint) id merchant purchase made at
i have tried several times don't know how to it.
select merchant_category ((purchase_amount_2014-purhase_amount_2015)/purchase_amount_2014*100) ( select sum(purchase_amount) purchase_amount_2015 case_data_order natural join case_data_merchant create_timestamp between '2014-01-01' , '2014-12-31' group merchant_category) data_2015
natural join (select sum(purchase_amount) purchase_amount_2014 case_data_order natural join case_data_merchant create_timestamp between '2015-01-01' , '2015-12-31 group merchant_category) data_2014;
you first select purchase data per each merchant category in 2014, 2015. join these data , use rank function ranking per each category.
with ranking_data ( select q1.merchant_category, q1.purhase_amount purchase_amount_2014, q2.purchase_amount purchase_amount_2015, rank() on (order q2.purchase_amount - q1.purhase_amount desc) purchase_rank (select d.merchant_category, sum(d1.purchase_amount) purchaseamount case_data_order d1 inner join case_data_merchant d2 on d1.merchant_id = d2.merchant_id d1.create_timestamp between '2014-01-01' , '2014-12-31' group d2.merchant_category) q1 inner join (select d.merchant_category, sum(d1.purchase_amount) purchaseamount case_data_order d1 inner join case_data_merchant d2 on d1.merchant_id = d2.merchant_id d1.create_timestamp between '2015-01-01' , '2015-12-31' group d2.merchant_category) q2 on q1.merchant_category = q2.merchant_category ) select merchant_category, case when purchase_amount_2015 = 0 0 else ((purchase_amount_2015 - purchase_amount_2014) / purchase_amount_2015 * 100 ) end percentage_growth ranking_data purchase_rank = 1;
Comments
Post a Comment