查询以查找唯一的数字对

njthzxwz  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(291)

创建表对(数字a、数字b)
数据在哪里

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3

等。
什么查询给了我唯一的对?我的意思是:

1,2 or 2,1
1,3    3,1
2,3    3,2
xzabzqsa

xzabzqsa1#

我认为这是最简单的解决办法。如果可以保证没有重复对,那么 GROUP BY 不需要。

SELECT a, b 
FROM pairs
WHERE a < b
GROUP BY a, b

输出:

a   b   
1   2
1   3
2   3

你可以随时改变主意 <> 如果需要备用输出:

a   b   
2   1
3   1
3   2

正如@timbiegeleisen所指出的,它甚至可以进一步简化为

SELECT DISTINCT a, b 
FROM pairs
WHERE a < b

我不确定这些查询中哪一个可能是最快的。

cnwbcb6i

cnwbcb6i2#

你可以在这里使用最小/最大的技巧:

SELECT
    LEAST(a, b), GREATEST(a, b)
FROM yourTable
WHERE a <> b
GROUP BY
    LEAST(a, b), GREATEST(a, b);

要了解为什么这样做,请考虑这两对 (1, 2) 以及 (2, 1) . 在这两种情况下,最小的决定 1 最棒的是 2 ,因此,根据查询中的逻辑,这两个对将被报告为同一事物。
我们还可以将其收紧到以下程度:

SELECT DISTINCT LEAST(a, b), GREATEST(a, b)
FROM yourTable
WHERE a <> b;

注意:如果你想返回一对在哪里 a = b ,然后卸下 WHERE 条款。

4si2a6ki

4si2a6ki3#

SELECT sub.output FROM
(
SELECT  CONCAT(a,b, ' or ',
b,a ) output,
ASCII(a)+ASCII(b) asci
FROM tbl_t1 WHERE a!=b
) sub GROUP BY sub.asci;

相关问题