有什么办法在mysql中通过语句获得组的反转吗?我的用例是删除所有重复项。GROUP BY inverse(mysql)
说我的表看起来像这样:
ID | columnA | ...
1 | A
2 | A
3 | A
4 | B
5 | B
6 | C
我希望我的结果集是这样的:
ID | columnA | ...
2 | A
3 | A
5 | B
(本质上,这找到所有副本留下一个在后面可以用来清洗。所有重复的记录降至1,或稍后执行其他分析)。
有什么办法在mysql中通过语句获得组的反转吗?我的用例是删除所有重复项。GROUP BY inverse(mysql)
说我的表看起来像这样:
ID | columnA | ...
1 | A
2 | A
3 | A
4 | B
5 | B
6 | C
我希望我的结果集是这样的:
ID | columnA | ...
2 | A
3 | A
5 | B
(本质上,这找到所有副本留下一个在后面可以用来清洗。所有重复的记录降至1,或稍后执行其他分析)。
一种方式是采取一切,但第一个ID为ColumnA
每个值:
select t.*
from t
where t.id > (select min(t2.id) from t t2 where t2.columnA = t.columnA);
你的结果似乎
select max(id), columnA group by columnA
我实现了一个基于@scaisEdge响应自己的解决方案之前,他编辑了。需要与我的群组相反,所以使用子查询:
SELECT * FROM mytable WHERE ID NOT IN (SELECT ID FROM mytable GROUP BY columnA);
因此,您确实希望查询返回重复项,而不是其他方式......我认为您只是困惑了一些人。 – sstan
这个问题说“留下一个”。该解决方案从每个组中删除1行,所以它会留下多行。 – Barmar
对不起,我的措辞不是最好的,但我的例子正确地显示我想要的。 – user3726494
我相信这会有所帮助。
create table test.temptable select distinct * from YourTable;
truncate YourTable;
insert into YourTable select * from test.temptable ;
您的表格没有重复的内容...您是什么意思的“重复”? – nosbor
“你想要”的结果集有重复(A存在两次) –
这是怎么回事?这正是GROUP BY所做的,它将所有重复项组合成一行。 – Barmar