gpt4 book ai didi

MySQL根据条件和多列组合删除重复项

转载 作者:搜寻专家 更新时间:2023-10-30 20:51:40 25 4
gpt4 key购买 nike

我在 MySQL 中有一个表如下:

ID, COL1, COL2 VALUE
'1', 'OBJ1', 'OBJ2', '5'
'2', 'OBJ1', 'OBJ2', '1'
'3', 'OBJ2', 'OBJ1', '3'
'4', 'OBJ3', 'OBJ1', '4'
'5', 'OBJ3', 'OBJ4', '6'

col1 和col2 之间的关系与位置无关,即OBJ1 in col1 和OBJ2 in col2 与OBJ1 in col2 和OBJ2 in col1 相同。这意味着 OBJ1 和 OBJ2 共享一个关系。现在,这意味着对象 OBJ1 和 OBJ2 的值为 1,5,3...我只想保留不同的值,即 OBJ1、OBJ2 应该在表中只出现一次,甚至 OBJ2、OBJ1 也不能。重要的是,我只想保留具有最高值的行。我想要的结果是:

ID, COL1, COL2 VALUE
'1', 'OBJ1', 'OBJ2', '5'
'4', 'OBJ3', 'OBJ1', '4'
'5', 'OBJ3', 'OBJ4', '6'

执行此操作的最佳和有效方法是什么?我有超过 1000 万行。

我在许多论坛/Google 中进行了搜索,但找不到我正在寻找的确切答案..

最佳答案

试试这个:

SELECT t1.ID, t1.COL1, t1.COL2, t1.VALUE
FROM mytable AS t1
JOIN (
SELECT LEAST(COL1, COL2) AS C1,
GREATEST(COL1, COL2) AS C2,
MAX(VALUE) AS max_Value
FROM mytable
GROUP BY LEAST(COL1, COL2),
GREATEST(COL1, COL2)
) AS t2 ON t1.COL1 = t1.C1 AND t1.COL2 = t2.C2 AND t1.VLAUE = t2.max_Value

关于MySQL根据条件和多列组合删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com