有没有办法在mysql中获取group by语句的反转?我的用例是删除所有重复项。
说我的表看起来像这样:
ID | columnA | ...
1 | A
2 | A
3 | A
4 | B
5 | B
6 | C
我希望我的结果集看起来像这样:
ID | columnA | ...
2 | A
3 | A
5 | B
(基本上,这会发现所有重复项都会留下一个。可用于将所有重复记录清除为1,或稍后执行其他分析。)
答案 0 :(得分:0)
一种方法是为ColumnA
的每个值取一个除第一个id以外的所有内容:
select t.*
from t
where t.id > (select min(t2.id) from t t2 where t2.columnA = t.columnA);
答案 1 :(得分:0)
这应该比基于内部选择的查询执行得更好。
SELECT
*
FROM
TABLE
QUALIFY
RANK() OVER (partition by columnA order by ID ASC ) = 1
编辑:这显然不适用于MySQL。猜猜唯一的答案是通过oracle许可证 - 或者使用其他答案。 ;)
答案 2 :(得分:0)
您的结果似乎
select max(id), columnA group by columnA
答案 3 :(得分:0)
在编辑之前,我基于@scaisEdge响应实现了自己的解决方案。需要与我的组相反,所以使用子查询:
SELECT * FROM mytable WHERE ID NOT IN (SELECT ID FROM mytable GROUP BY columnA);
答案 4 :(得分:0)
我相信这会有所帮助。
create table test.temptable select distinct * from YourTable;
truncate YourTable;
insert into YourTable select * from test.temptable ;