我有一个表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 |
我已经能够通过一些案例陈述和联接成功地做到这一点,但是很快变得一团糟,我希望学习一种更好的方法。
答案 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)