Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 根据分布分配列值_Postgresql_Amazon Redshift - Fatal编程技术网

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)