为什么DISTINCT ON
要对行进行排序?例如查询
SELECT DISTINCT ON (a) a
FROM (
VALUES (2), (3), (1)
) x(a);
会有结果
1
2
3
而没有DISTINCT ON
SELECT a
FROM (
VALUES (2), (3), (1)
) x(a);
我会得到正确的顺序
2
3
1
如何保持定义值的自然顺序?“自然顺序”是指“定义值的顺序”。我知道如果我没有用 明确指定它,DBMS 可能会更改顺序ORDER BY
,但我没想到DISTINCT ON
我会以这种方式进行干预。
Distinct 从结果集中删除“重复”行。如果被比较的项目整齐地按顺序排列,这会容易得多。
检查此查询的解释计划 - 它可能包含额外的“排序”和“唯一”步骤。猜猜他们在做什么。
“
select distinct
”对我来说总是一个危险信号。它几乎总是用得不好,是解决更大问题并引入自身问题的创可贴。请记住,...的表现……大致相当于……
问问自己为什么[你认为]你需要使用“distinct”。