在PostgreSQL中从两个表创建表

3

表格 1:

+-----+-----+
| TID | Rev |
+-----+-----+
| A   |  20 |
| B   | 100 |
| C   |  10 |
+-----+-----+

表格2:

+-----+-------+
| TID | Count |
+-----+-------+
| A   |     2 |
| B   |     3 |
| C   |     2 |
+-----+-------+

必要条件: 从表1中取50%的收入,并根据表2中给定TID的计数使用线性衰减进行分配。

示例:对于TID=A,表1:Rev=20,表2:count=2

步骤1:取Rev的50%= 10

步骤2:使用衰减(除以2)进行分配,即10和5

    +-----+-------+
    | TID | Value |
    +-----+-------+
    | A   | 10    |
    | A   | 5     |
    | B   | 50    |
    | B   | 25    |
    | B   | 12.5  |
    | C   | 5     |
    | C   | 2.5   |
    +-----+-------+

2
如果B的计数为5,为什么结果中只有3个条目?难道不应该是5个吗? - Mureinik
已编辑。填写值时出现错误。现已更正。 - user4466316
1个回答

2

场景设定:

create table revs (tid text, rev numeric);
insert into revs values
('A',  20),
('B', 100),
('C',  10);

create table counts (tid text, ct int);
insert into counts values
('A', 2),
('B', 5),
('C', 2);

这是一个使用递归CTE的案例:
with recursive revrec(tid, rev, ct) as (
    select tid, rev / 2, ct- 1
    from revs
    join counts using(tid)
union
    select tid, rev / 2, ct- 1
    from revrec
    where ct > 0
)
select tid, rev
from revrec
order by tid, ct desc;

 tid |         rev         
-----+---------------------
 A   | 10.0000000000000000
 A   |  5.0000000000000000
 B   | 50.0000000000000000
 B   | 25.0000000000000000
 B   | 12.5000000000000000
 B   |  6.2500000000000000
 B   |  3.1250000000000000
 C   |  5.0000000000000000
 C   |  2.5000000000000000
(9 rows)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接