PostgreSQL DISTINCT


PostgreSQL DISTINCT

在本节中,我们将了解PostgreSQL DISTINCT 子句的工作原理,该子句用于从表中删除匹配的行或数据并仅获取唯一记录。

注意: DISTINCT 子句仅与 SELECT 命令一起使用。DISTINCT 子句可用于SELECT命令的选择列表中的多个列,并且还为每个重复组保留一行。

PostgreSQL select distinct 子句的语法

DISTINCT 子句的基本语法如下:

语法 1

在以下语法中,column1中的值用于评估重复项。

如果我们描述各个列,DISTINCT子句将根据这些列的值的分组来分析匹配的行或数据。

Select Distinct column1  
FROM table_name;

语法2

如果column1column2列具有相似的值,那么要获取重复值,我们可以使用以下语法:

SELECT DISTINCT column1, column2  
FROM table_name;

语法 3

PostgreSQL还提供了 DISTINCT ON 表达式来维护每组重复项的第一行。因此,对于这些情况,可以使用以下命令:

SELECT DISTINCT ON (column1) column_alias, column2  
FROM table_name  
ORDER BY column1, column2 ;

如果我们连续执行带有DISTINCT ON(表达式)的 ORDER BY 子句以使结果可预期,因为这是一个很好的练习。

注意:ORDER BY 子句中最左边的表达式必须与 DISTINCT ON 表达式匹配。

PostgreSQL SELECT DISTINCT 示例

为了理解 PostgreSQL 中 DISTINCT 子句的工作,我们将看一些例子。

为此,我们正在创造一个新的表名为demo_dist\插入一些值到一个特定的表。在本节中,我们只是在psql 或 pgAdmin 中执行命令。

要查看PostgreSQL 的Pgadmin4 中**Select Distinct 命令示例**,我们需要按照以下步骤操作:

步骤1

我们将在CREATE TABLE命令的帮助下创建一个表,正如我们在下面的命令中看到的,我们已经创建了Demo_dist\表,它由三列Serial_NO、Summer_fruits 和 Winter_fruits 组成

CREATE TABLE demo_dist(  
    Serial_No serial NOT NULL PRIMARY KEY,  
    Summer_fruits VARCHAR,  
    Winter_fruits VARCHAR     
);

输出

执行上述命令后,我们将得到以下消息窗口;该Demo_dist\表已成功创建。

PostgreSQL DISTINCT

第2步

创建Demo_dist\表后,我们将在以下 INSERT 命令的帮助下向其中插入一些值:

INSERT INTO demo_dist (Summer_fruits, Winter_fruits)  
VALUES('Mango', 'Grape'),  
('Watermelon', 'Pears'),('Apples','Apples'),   
('Mango', NULL),(NULL, 'Mango'), ('Apples','Apples'),  
('Guava', 'Oranges'),('Pineapple', 'Pineapple'),  
('Musk Melon', ' Bananas'),('Litchi', 'Cranberries');

输出

执行上述命令后,我们将得到以下消息窗口;这些已成功插入到Demo_dist\表中。

PostgreSQL DISTINCT

Step3

之后,我们将借助以下 SELECT 命令从Demo_dist\表中选择数据:

SELECT Serial_No,Summer_fruits, Winter_fruits  
FROM demo_dist ;

输出

一旦我们执行了上面的命令,我们将得到以下输出:

PostgreSQL DISTINCT

PostgreSQL DISTINCT 一列示例

在下面的示例中,我们将从Demo_dist表中选择Summer_fruits列中的唯一记录并执行ORDER BY 子句以按顺序获取结果。

SELECT DISTINCT Summer_fruits  
FROM demo_dist   
ORDER BY Summer_fruits ;

输出

执行上述命令后,我们将得到以下输出,其中按字母顺序获得了summer _fruits列的列表。

PostgreSQL DISTINCT

使用 PostgreSQL DISTINCT 的多列示例

在下面的示例中,我们将在一列或多列上使用 DISTINCT 子句,

要使用不同的子句获取各个列的值,我们将采用Summer_fruits 和 Winter_fruits列,如下面的命令所示:

SELECT DISTINCT Summer_fruits, Winter_fruits  
FROM demo_dist  
ORDER BY Summer_fruits, Winter_fruits;

输出

执行上述命令后,我们将获得以下输出,其中按字母顺序获得了summer_fruits 和 Winter_fruits列的列表。

PostgreSQL DISTINCT

在上面的命令中,我们在SELECT DISTINCT子句中描述了Summer_fruits 和 Winter_fruits列;这就是 PostgreSQL 加入Summer_fruits 和 Winter_fruits列中的值以分析行的唯一性的原因。

一旦我们执行了上述命令,它就会Demo_dist表中返回Summer_fruits 和 Winter_fruits的唯一组合。

注意:Demo_dist 表有两行,Summer_fruits 和 Winter_fruits 列中的值为 Apples。当我们对两列都使用 DISTINCT 时,从输出中删除了一行,因为它是重复的。

示例 PostgreSQL DISTINCT ON

在下面的示例中,我们将按Summer_fruits 和 Winter_fruits对结果进行排序,并为每组重复值保留返回输出中的第一行。

SELECT Distinct ON (Summer_fruits) summer_fruits, winter_fruits  
FROM public.demo_dist  
ORDER BY Summer_fruits, winter_fruits;

输出

执行上面的命令后,我们将得到下面的输出,它显示了两列,即 Summer_fruits 和 Winter_fruits 没有显示相似值的结果。

PostgreSQL DISTINCT