distinct去重多个字段_sql-distinct怎么对其中某列去重还保留另外的列

我们在去重的时候,有几种情况:

  1. 对某一列或者多列去重,即某列相同或者某几列完全相同就去重
  2. 所有列相同时对这一列去重

假设有一张名为logs的表如下:

b509a74c53228ca231f2dbf6c36ba038.png

我们先看几种写法:

  • 只对单独列去重并返回单独列时
SELECT  DISTINCT Num
FROM `logs`

43db8bb164242c01045cd08e1db7aaf3.png

肯定符合我们的想法。

  • 只对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

0275638ab23b4ffbee4d461341ca7b92.png

这时候就需要用GROUP BY + MAX/MIN对Num分组筛选最大的Id还是最小的Id.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值