PostgreSQL SELECT DISTINCT 子句简介
DISTINCT
子句在
SELECT
语句中用于从结果集中删除重复行。
DISTINCT
子句为每组重复项保留一行。
DISTINCT
子句可以应用于
SELECT
语句的选择列表中的一列或多列。
下面说明了
DISTINCT
子句的语法:
SELECT
DISTINCT column1
table_name;
在此语句中,
column1
列中的值用于计算重复项。
如果指定多个列,
DISTINCT
子句将根据这些列值的组合计算重复项。
SELECT
DISTINCT column1, column2
table_name;
在这种情况下,
column1
和
column2
列中的值的组合将用于计算重复项。
PostgreSQL 还提供了
DISTINCT ON (expression)
来保留每组重复项的第一行的功能,使用以下语法:
SELECT
DISTINCT ON (column1) column_alias,
column2
table_name
ORDER BY
column1,
column2;
从
SELECT
语句返回的行的顺序是未指定的,因此每组重复项的第一行也是未指定的。
最好始终使用带有
DISTINCT ON(expression)
的
ORDER BY
子句,以使结果集可预测。
请注意,
DISTINCT ON
表达式必须与
ORDER BY
子句中最左边的表达式匹配。
PostgreSQL SELECT DISTINCT 示例
让我们
创建一个新表
,名为
distinct_demo
,并向其中
插入数据
来练习
DISTINCT
子句。
请注意,您将在后续教程中学习如何创建表并向表中插入数据。在本教程中,您只需在 psql 或 pgAdmin 中执行语句即可。
首先,使用以下
CREATE TABLE
语句创建
distinct_demo
表,它包含三列:
id
、
bcolor
和
fcolor
。
CREATE TABLE distinct_demo (
id serial NOT NULL PRIMARY KEY,
bcolor VARCHAR,
fcolor VARCHAR
其次,使用以下
INSERT
语句将一些行插入
distinct_demo
表中:
INSERT INTO distinct_demo (bcolor, fcolor)
VALUES
('red', 'red'),
('red', 'red'),
('red', NULL),
(NULL, 'red'),
('red', 'green'),
('red', 'blue'),
('green', 'red'),
('green', 'blue'),
('green', 'green'),
('blue', 'red'),
('blue', 'green'),
('blue', 'blue');
第三步,使用
SELECT
语句查询
distinct_demo
表中的数据:
SELECT
bcolor,
fcolor
distinct_demo ;
PostgreSQL DISTINCT 单列示例
以下语句从t1
表中查询bcolor
列中的唯一值,并使用 ORDER BY 子句按字母顺序对结果集进行排序。
SELECT
DISTINCT bcolor
distinct_demo
ORDER BY
bcolor;
PostgreSQL DISTINCT 多列示例
以下语句演示了如何在多个列上使用DISTINCT
子句:
SELECT
DISTINCT bcolor,
fcolor
distinct_demo
ORDER BY
bcolor,
fcolor;
因为我们在SELECT DISTINCT
子句中指定了bcolor
和fcolor
列,所以 PostgreSQL 组合了bcolor
和fcolor
列中的值来计算行的唯一性。
该查询返回distinct_demo
表中bcolor
和fcolor
的唯一组合。请注意,distinct_demo
表有两行,并且bcolor
和fcolor
列中都有red
值 。当我们将DISTINCT
应用于两列时,一行被从结果集中删除,因为它是重复的。
PostgreSQL DISTINCT ON 示例
以下语句按bcolor
和fcolor
对结果集进行排序,然后对于每组重复项,它保留返回结果集中的第一行。
SELECT
DISTINCT ON (bcolor) bcolor,
fcolor
distinct_demo
ORDER BY
bcolor,
fcolor;
这是输出:
在本教程中,您学习了如何使用 PostgreSQL 的SELECT DISTINCT
语句删除查询返回的重复行。