将最大行数从 table 配对到另一个
Pairing a max number of rows from a table to another
假设我们有两个 tables,其中 T1 的行数少于 T2,我们希望将 T1 行与最多 3 个不同的随机 T2 行配对。每个 T1 行都必须配对,而并非所有 T2 行都需要配对
T1:
|c1 | ...|
------------
|'a' | ...|
|'b' | ...|
|'c' | ...|
T2:
|c1 |...|
----------
|1 |...|
|2 |...|
|3 |...|
|4 |...|
|5 |...|
|6 |...|
|c1 |c2 |
----------
|'a' | 3|
|'a' | 4|
|'a' | 1|
|'b' | 6|
|'c' | 2|
|'c' | 5|
我试图给 T2 table 一个从 1 到 T1 行的随机数,目的是根据 T2 的随机数列和T1 的行号,但问题是我无法弄清楚如何将每个随机数出现的次数限制为 3。所以问题是配对这些 table 的最有效方法是什么?
我怀疑这个练习的用处,对于大表来说它不会很快,但你可以
SELECT a1.col1, a2.col2
FROM (SELECT row_number() OVER () AS n,
c1 AS col2
FROM t2) AS a2
RIGHT JOIN (SELECT row_number() OVER (ORDER BY random()) AS n,
c1 AS col1
FROM (SELECT c1 FROM t1
UNION ALL
SELECT c1 FROM t1
UNION ALL
SELECT c1 FROM t1) AS q
) AS a1
USING (n);
假设我们有两个 tables,其中 T1 的行数少于 T2,我们希望将 T1 行与最多 3 个不同的随机 T2 行配对。每个 T1 行都必须配对,而并非所有 T2 行都需要配对
T1:
|c1 | ...|
------------
|'a' | ...|
|'b' | ...|
|'c' | ...|
T2:
|c1 |...|
----------
|1 |...|
|2 |...|
|3 |...|
|4 |...|
|5 |...|
|6 |...|
|c1 |c2 |
----------
|'a' | 3|
|'a' | 4|
|'a' | 1|
|'b' | 6|
|'c' | 2|
|'c' | 5|
我试图给 T2 table 一个从 1 到 T1 行的随机数,目的是根据 T2 的随机数列和T1 的行号,但问题是我无法弄清楚如何将每个随机数出现的次数限制为 3。所以问题是配对这些 table 的最有效方法是什么?
我怀疑这个练习的用处,对于大表来说它不会很快,但你可以
SELECT a1.col1, a2.col2
FROM (SELECT row_number() OVER () AS n,
c1 AS col2
FROM t2) AS a2
RIGHT JOIN (SELECT row_number() OVER (ORDER BY random()) AS n,
c1 AS col1
FROM (SELECT c1 FROM t1
UNION ALL
SELECT c1 FROM t1
UNION ALL
SELECT c1 FROM t1) AS q
) AS a1
USING (n);