Postgres中DISTINCT的众多面孔 (2017)

当你在使用PostgreSQL时,你可能知道DISTINCT这个关键词可以让你从SELECT语句的结果集中过滤掉重复的行。但是,DISTINCT可以做的远不止这些!

在这篇文章中,我们将一探Postgres中DISTINCT的众多面孔。

1. 单一列DISTINCT

第一个和最常见的用法是过滤出单一列的不同值,如下所示:

SELECT DISTINCT col1 FROM table1;

这将返回不同的col1值,忽略其他列。

2. 多列DISTINCT

如果你想过滤出多个列的不同组合,你可以使用一个类似这样的语句:

SELECT DISTINCT col1, col2 FROM table1;

这将返回不同的col1和col2组合,忽略其他列。

3. ORDER BY with DISTINCT

如果你想按值的顺序排列结果,并且仍然排除重复的行,那么你可以使用以下语法:

SELECT DISTINCT ON (col1) col1, col2 FROM table1 ORDER BY col1, col2;

这是一个有趣的方法,它将返回与DISTINCT col1相同的记录中的第一个结果,而不是随机的结果。

在这个例子中,我们使用ORDER BY将结果按col1和col2排序。DISTINCT ON (col1)告诉PostgreSQL只选取DISTINCT列col1中的第一行,随后还将按col1和col2排序。

4. DISTINCT和COUNT

如果你想知道某一列中有多少不同的值,可以使用COUNT和DISTINCT组合起来使用:

SELECT COUNT(DISTINCT col1) FROM table1;

这将返回col1列中不同的值的数量。

5. DISTINCT和SUM

如果你想对某一列中不同的值进行SUM运算,你可以使用DISTINCT:

SELECT SUM(DISTINCT col1) FROM table1;

这将返回col1列中不同的值的加和。

总之,Postgres中的DISTINCT可以让你按照不同的需求来处理重复的行,让你的查询更加精确和有效率。希望这篇文章能让你充分了解DISTINCT的众多面孔,并在使用PostgreSQL时更加得心应手!

详情参考

了解更多有趣的事情:https://blog.ds3783.com/