DISTINCT删除重复行

DISTINCT

在处理完选择列表之后,生成的表可以删除重复行. 我们可以直接在 SELECT 后面写上 DISTINCT 关键字来实现这个目的:

SELECT DISTINCT select_list ...

(如果不用 DISTINCT 你可以用 ALL 选择保留所有行的缺省行为.)

显然,如果两行里至少有一个列有不同的值,那么我们认为它是 独立的.NULL 在这种考虑中认为是相同的.

另外,我们还可以用任意表达式来判断什么行可以认为是独立的:

SELECT DISTINCT ON (expression [, expression ...]) select_list ...

这里 expression 是任意值表达式, 它为所有行计算.如果一个行集合里所有行计算出的该表达式的值 是一样的,那么我们认为它们是重复的并且因此只有第一行保留在 输出中.请注意这里的一个集合的"第一行"是不可 预料的,除非你在足够多的字段上对该查询排了序,保证到达 DISTINCT 过滤器的行的顺序是唯一的.(DISTINCT ON 处理是发生 在 ORDER BY 排序后面的.)

DISTINCT ON 子句不是 SQL 标准的一部分,有时候有人认为它 是一个糟糕的风格,因为它的结果是不可判定的.如果用有选择的 GROUP BY 和在 FROM 中的子查询,那么我们可以避免使用这个构造, 但是通常它是更方便的候选方法.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值