首页 > 解决方案 > 使用最小数字删除sql中的重复项

问题描述

我有一个关于 SQL 的问题。

假设我有一个只有 2 列的表,它看起来像这样:

col1    col2
--------------
12345   200000
12345   435000
200000  12345
200000  435000
435000  12345
435000  200000
600     1200
600     900
900     600
900     1200
1200    600
1200    900

我怎样才能使结果看起来像这样?

col1    col2
---------------
12345   200000
12345   435000
600     900
600     1200

这背后的逻辑是我想获得最小的数字作为主要的“关键”。由于 12345 匹配 200000 和 435000,并且由于 12345 是最低的,因此它成为匹配其他 2 个数字的主键。

您可以将其视为身份证号码。(12345 = 200000 = 435000) & (600 = 900 = 1200)。由于 12345 是第一组中最低的,而 600 是第二组中最低的,我只想显示 12345 和 600。

我努力了:

select col1, col2
from table_name
where col1<col2

但我有额外的行:

Extra row 1: 200000,435000. 
Extra row 2: 900, 1200.

标签: mysqlsql

解决方案


您可以使用以下查询

SELECT IF(col1 < col2, col1, col2) col1,
       IF(col1 >= col2, col1, col2) col2
FROM mytable
GROUP BY IF(col1 < col2, col1, col2),
         IF(col1 >= col2, col1, col2)

要得到:

col1    col2
---------------
600     900
600     1200
900     1200
12345   200000
12345   435000
200000  435000

因此,使用上面的作为派生表:

SELECT MIN(col1) col1,
       col2
FROM (       
   SELECT IF(col1 < col2, col1, col2) col1,
           IF(col1 >= col2, col1, col2) col2
   FROM mytable
   GROUP BY IF(col1 < col2, col1, col2),
            IF(col1 >= col2, col1, col2)
) AS t
GROUP BY col2

给你预期的结果:

col1    col2
---------------
600     900
600     1200
12345   200000
12345   435000

演示在这里


推荐阅读