我们在去重的时候,有几种情况:
- 对某一列或者多列去重,即某列相同或者某几列完全相同就去重
- 所有列相同时对这一列去重
假设有一张名为logs的表如下:
我们先看几种写法:
- 只对单独列去重并返回单独列时
SELECT DISTINCT Num
FROM `logs`
肯定符合我们的想法。
- 只对num列去重,并且保留Id列
这时候就有歧义了,当对num去重,显示的Id列是哪个了?比如说:num为1时,Id有1,2,3,5,是保留1还是2还是3还是5?所以需要说明,这时候DISTINCT就失效了,
SELECT Id, DISTINCT Num
FROM `logs`
上面的语句报错。DISTINCT必须放在开头。
SELECT DISTINCT Num Id
FROM `logs`
上面的语句是对Num,Id两列共同去重,并不是我们想要的。
SELECT max(Id), num
FROM `logs`
GROUP BY num
这时候就需要用GROUP BY + MAX/MIN对Num分组筛选最大的Id还是最小的Id.