Postgresql 根据分布分配列值
我有一个带有“净收入”列的收入表: 我需要根据以下分配进行分配:Postgresql 根据分布分配列值,postgresql,amazon-redshift,Postgresql,Amazon Redshift,我有一个带有“净收入”列的收入表: 我需要根据以下分配进行分配: A: 5% B: 10% C: 25% D: 60% 结果是: | net_revenue | product | |-------------|---------| | 5 | A | | 10 | B | | 25 | C | | 60 | D | | 10 | A | |
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 |
我用一些case语句和连接成功地做到了这一点,但它很快就变得混乱起来,我希望学习一种更好的方法。那可能是
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;
这似乎是一个简单的数学交叉连接,如果您已将百分比存储在另一个表中-
SELECT (r.net_revenue * p.percent)/100, p.product
FROM products p, revenue r;
使用交叉连接和硬编码值表。假设包含净收入列的表称为rev_表:
SELECT (r.net_revenue * p.percent)/100, p.product
FROM products p, revenue r;
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)