根据分布分配列值

时间:2019-08-23 17:58:09

标签: postgresql amazon-redshift

我有一个表revenue和一列net_revenue

net_revenue
------------
100
200

我需要根据以下分布进行分配:

A: 5%
B: 10%
C: 25%
D: 60%

最后得到:


| net_revenue | product |
|-------------|---------|
| 5           | A       |
| 10          | B       |
| 25          | C       |
| 60          | D       |
| 10          | A       |
| 20          | B       |
| 50          | C       |
| 120         | D       |

我已经能够通过一些案例陈述和联接成功地做到这一点,但是很快变得一团糟,我希望学习一种更好的方法。

3 个答案:

答案 0 :(得分:1)

如果您将百分比存储在另一张表中,那么这似乎是一些数学的简单交叉连接-

SELECT net_revenue * 0.05 AS net_revenue, 'A' AS product
UNION ALL
SELECT net_revenue * 0.10 AS net_revenue, 'B' AS product
UNION ALL
SELECT net_revenue * 0.25 AS net_revenue, 'C' AS product
UNION ALL
SELECT net_revenue * 0.60 AS net_revenue, 'D' AS product;

答案 1 :(得分:0)

可能是

tfstate

答案 2 :(得分:0)

将交叉联接与硬编码的值表一起使用。假设带有net_revenue列的表称为rev_table

SELECT
  rev_table.net_revenue * p.pct as net_revenue,
  p.product
FROM
  rev_table,
  (VALUES ('A', 0.05), ('B', 0.1), ('C', 0.25), ('D', 0.6)) as p (product, pct)