Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351283
  • 博文数量: 334
  • 博客积分: 10302
  • 博客等级: 上将
  • 技术积分: 2986
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 10:17
文章分类

全部博文(334)

文章存档

2013年(1)

2012年(9)

2011年(4)

2010年(10)

2009年(24)

2008年(64)

2007年(72)

2006年(150)

我的朋友

分类:

2007-12-12 14:47:51

DISTINCT

在处理完选择列表之后,生成的表可以删除重复行。 我们可以直接在 SELECT 后面写上 DISTINCT 关键字声明:

SELECT DISTINCT select_list ...

(如果不用 DISTINCT 你可以用 ALL 声明保留所有行的缺省行为。)

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

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

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

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

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

 

 

选摘自

阅读(1493) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-02-12 13:12:06

distinct 对性能会有损耗。