考虑下表:
#this is a.py
def main(i):
from numpy import sin
return sin(i)
我需要选择元素列的元素之间的所有可能组合,但是要过滤组列并按列类型进行分组。
使用以下查询,我可以通过过滤组1 的元素来执行此查询(这有类型1,2和3):
#this is b.py
def main(j):
from random import uniform
return uniform(0, j)
获得以下结果:
group | type | element
------+------+--------
1 | 1 | A
1 | 1 | B
1 | 2 | C
1 | 2 | D
1 | 3 | E
1 | 3 | F
2 | 4 | G
2 | 4 | H
2 | 5 | I
2 | 5 | J
2 | 5 | K
3 | 4 | L
3 | 4 | M
3 | 4 | N
3 | 5 | O
3 | 5 | P
3 | 6 | Q
3 | 7 | R
3 | 7 | S
3 | 7 | T
已经按第2组的元素进行过滤我需要使用另一个减少交叉连接数量的查询,因为第2组的类型较少(只有类型4和5):
SELECT T1.*, T2.type, T2.element, T3.type, T3.element
FROM (SELECT * FROM test WHERE "group" = 1 AND type = 1) AS T1
CROSS JOIN (SELECT * FROM test WHERE "group" = 1 AND type = 2) AS T2
CROSS JOIN (SELECT * FROM test WHERE "group" = 1 AND type = 3) AS T3;
获得以下结果:
group | type | element | type | element | type | element
------+------+---------+------+---------+------+--------
1 | 1 | A | 2 | C | 3 | E
1 | 1 | A | 2 | C | 3 | F
1 | 1 | A | 2 | D | 3 | E
1 | 1 | A | 2 | D | 3 | F
1 | 1 | B | 2 | C | 3 | E
1 | 1 | B | 2 | C | 3 | F
1 | 1 | B | 2 | D | 3 | E
1 | 1 | B | 2 | D | 3 | F
最后选择 group 3 过滤的元素,我需要增加交叉连接的数量,因为这个组有4种类型(4,5,6和7):
SELECT T1.*, T2.type, T2.element
FROM (SELECT * FROM test WHERE "group" = 2 AND type = 4) AS T1
CROSS JOIN (SELECT * FROM test WHERE "group" = 2 AND type = 5) AS T2;
获得以下结果:
group | type | element | type | element
------+------+---------+------+--------
2 | 4 | G | 5 | I
2 | 4 | G | 5 | J
2 | 4 | G | 5 | K
2 | 4 | H | 5 | I
2 | 4 | H | 5 | J
2 | 4 | H | 5 | K
疑问!
如何创建一个可以独立于不同(不同)组,类型和元素数量的结果的单个查询?
为了更好地理解组,类型和元素类型列之间的关系:
SELECT T1.*, T2.type, T2.element, T3.type, T3.element, T4.type, T4.element
FROM (SELECT * FROM test WHERE "group" = 3 AND type = 4) AS T1
CROSS JOIN (SELECT * FROM test WHERE "group" = 3 AND type = 5) AS T2
CROSS JOIN (SELECT * FROM test WHERE "group" = 3 AND type = 6) AS T3
CROSS JOIN (SELECT * FROM test WHERE "group" = 3 AND type = 7) AS T4;