GROUP BY逆(mysql)

时间:2016-07-12 18:49:50

标签: mysql sql

有没有办法在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,或稍后执行其他分析。)

5 个答案:

答案 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 ;