mysql - 使用最小数字删除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.
解决方案
您可以使用以下查询
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
推荐阅读
- matlab - 有没有办法在 Matlab 中使用具有不同尺寸元素的表格来操作 K-Nearest-Neighbot 分类?
- java - 在 Spring Data JPA 中的本机查询之间共享 SQL
- java - 使用当前坐标调用 glTranslatef 以恒定速度移动对象(OpenGL ES 1.1)
- asp.net-mvc-5 - 使用 (SqlDataReader reader = cmd.ExecuteReader()) 错误 asp.net mvc5
- xamarin - 编辑 Tizen 清单文件
- r - 如何在R中的许多矩阵列表上平均相同的单元格
- sql - spark数据帧中IFNULL和IFF的等效SQL函数
- swift - 如何使用 UIPanGestureRecognizer 以 180 度角对 CALayer 进行 3Drotate 和 3Dtranslate?
- perl - Perlbrew 构建 5.28.2 失败,显然没有失败
- java - 通过 @NamedArg 将函数引用传递给自定义节点构造函数