繁体   English   中英

如何将一列的值除以另一列(除数始终是预定义的固定行)?

[英]How to divide the value of a column by another (the divisor is always a predefined and fixed row)?

所以基本上我有一张这样的表格,上面有年份、月份和客户数量(称为群组)。 该列之所以称为群组,是因为在 2015 年 1 月,我计算了我所有的唯一买家,现在我正在检查有多少人在接下来的几个月中返回购买更多产品。

+----------------+-----------+
|  YEAR  | MONTH |  COHORT   |
+----------------+-----------+
|  2015  |  01   |  100      |
|  2015  |  02   |  54       |
|  2015  |  03   |  32       |
|  2015  |  04   |  29       |
|  2015  |  05   |  26       |
|  2015  |  06   |  17       |
|  2015  |  07   |  09       |
|  2015  |  08   |  03       |
+--------+-------+-----------+

但是,我需要知道从 2015 年 2 月起返回客户的百分比是多少。 所以我需要这样的东西:

+----------------+-----------+----------+
|  YEAR  | MONTH |  COHORT   |  SHARE   |
+----------------+-----------+----------+
|  2015  |  01   |  212      |  100%    |
|  2015  |  02   |  54       |  25%     |
|  2015  |  03   |  32       |  15%     |
|  2015  |  04   |  29       |  13%     |
|  2015  |  05   |  26       |  12%     |
|  2015  |  06   |  17       |  8%      |
|  2015  |  07   |  09       |  4%      |
|  2015  |  08   |  03       |  1%      |
+--------+-------+-----------+----------+

知道最小年份和月份是我的基础/总队列,我怎么能做到这一点?

考虑下面

select *, 
  round(100 * COHORT / (first_value(COHORT) over(order by YEAR, MONTH)), 2) SHARE
from your_table
where YEAR >= 2015 and MONTH >= 1     

如果应用于您问题中的样本数据 - 输出是

在此处输入图像描述

您可以使用标量子查询来查找 2015 年 1 月队列的大小。 然后,使用此值对每个后续队列进行标准化以找到百分比。

SELECT YEAR, MONTH, COHORT,
       100.0 * COHORT / (SELECT COHORT FROM yourTable
                         WHERE YEAR = 2015 AND MONTH = 1) AS SHARE
FROM yourTable
ORDER BY YEAR, MONTH;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM