从测试中选择*; 一个 | b ---+--- 1 | 5 4 | 1 2 | 5 3 | 3 1 | 1 (5 行)
我如何编写这样的查询,所以“a”列中的所有输出值都是不同的,“b”列中的所有输出值也是不同的。
因此,例如,上述查询的有效结果集是:
1 | 5 4 | 1 3 | 3
下一个也是有效的:
4 | 1 2 | 5 3 | 3
最好找到尽可能多的结果,但这不是必需的。
最好的方法是什么?
谢谢。
从测试中选择*; 一个 | b ---+--- 1 | 5 4 | 1 2 | 5 3 | 3 1 | 1 (5 行)
我如何编写这样的查询,所以“a”列中的所有输出值都是不同的,“b”列中的所有输出值也是不同的。
因此,例如,上述查询的有效结果集是:
1 | 5 4 | 1 3 | 3
下一个也是有效的:
4 | 1 2 | 5 3 | 3
最好找到尽可能多的结果,但这不是必需的。
最好的方法是什么?
谢谢。
自己找到解决方案!:)
a) 将 id 列添加到“test”表
b) sql 查询:
和 t1 AS (SELECT a, MIN(id) as id FROM test GROUP BY a), t2 AS (SELECT b, MIN(id) as id FROM test GROUP BY b) 从测试中选择 * id 在哪里(从 t1 选择 id)和 id 在(从 t2 选择 id);
结果:
编号 | 一个 | b ----+---+--- 6 | 1 | 5 7 | 4 | 1 9 | 3 | 3
我认为这也应该给你正确的输出: SELECT a, MIN(b) as b FROM test GROUP BY a Intersect SELECT min(a) as a, b FROM test GROUP BY b;
编辑:试试这个:
Select MIN(t1.a), t1.b from (SELECT a, MIN(b) as b FROM test GROUP BY a) t1 GROUP BY t1.b