【问题标题】:highest percentage growth最高百分比增长
【发布时间】:2018-02-19 08:36:27
【问题描述】:

我正在使用 Postgres 9.6 和 pgadmin 4。

我的问题如下:

在 2014 年到 2015 年期间,哪个细分市场的百分比增长率最高?多少钱?

这是两个表之间的连接

表 1:case_data_order

  • create_timestamp-(时间戳)看起来像这样,例如:2014-01-01 10:12:20
  • purchase_amount- (bigint) 购买金额
  • id -(数字)-单次购买的 id
  • merchant_id - 与以下相同。

表 2:case_data_merchant

  • merchant_category(文本)- 这是差异部分所在的位置
  • merchant_id-(bigint) 购买商品的商家 ID

试了好几次都不知道怎么弄。

select merchant_category ((purchase_amount_2014-purhase_amount_2015)/purchase_amount_2014*100) 
from (
    select sum(purchase_amount) as purchase_amount_2015 
    from case_data_order 
       natural join case_data_merchant 
    where create_timestamp between '2014-01-01' and '2014-12-31'
  group by merchant_category) as data_2015

自然连接 (选择 sum(purchase_amount) 作为 purchase_amount_2014 来自 case_data_order 自然连接 case_data_merchant 其中 create_timestamp 在“2015-01-01”和“2015-12-31”之间 按商家类别分组)作为 data_2014;

【问题讨论】:

  • 发布你到目前为止所做的事情

标签: sql postgresql


【解决方案1】:

您可以先选择2014、2015年每个商家类别的购买数据。然后将这些数据加入并使用RANK函数得到每个类别的排名。

WITH ranking_data 
     AS (
        SELECT q1.merchant_category, 
               q1.purhase_amount AS  purchase_amount_2014,
               q2.purchase_amount AS  purchase_amount_2015,
               RANK() OVER (ORDER BY q2.purchase_amount - q1.purhase_amount DESC) AS purchase_rank 
         FROM   (SELECT d.merchant_category, 
                        Sum(d1.purchase_amount) AS purchaseamount 
                 FROM   case_data_order d1 
                        INNER JOIN case_data_merchant d2 
                                ON d1.merchant_id = d2.merchant_id 
                 WHERE  d1.create_timestamp BETWEEN 
                        '2014-01-01' AND '2014-12-31' 
                 GROUP  BY d2.merchant_category) q1 
                INNER JOIN (SELECT d.merchant_category, 
                                   Sum(d1.purchase_amount) AS purchaseamount 
                            FROM   case_data_order d1 
                                   INNER JOIN case_data_merchant d2 
                                           ON d1.merchant_id = d2.merchant_id 
                            WHERE  d1.create_timestamp BETWEEN 
                                   '2015-01-01' AND '2015-12-31' 
                            GROUP  BY d2.merchant_category) q2 
                        ON q1.merchant_category = q2.merchant_category
        ) 
SELECT 
    merchant_category, 
    CASE 
        WHEN purchase_amount_2015 = 0 THEN 0
        ELSE ((purchase_amount_2015 - purchase_amount_2014) / purchase_amount_2015 * 100 )
    END AS percentage_growth
FROM   ranking_data 
WHERE  purchase_rank = 1;

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多