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/