我对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是最低的,因此它成为匹配其他两个数字的主键。
您可以将其视为ID号。 (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.
答案 0 :(得分:1)
您可以使用以下查询
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