Postgresql 为什么可以';我不能用一个等式来表示顺序by和select distincts吗?

Postgresql 为什么可以';我不能用一个等式来表示顺序by和select distincts吗?,postgresql,Postgresql,假设我有 select distinct id, flavor from bageltown order by id, flavor 这很有效 但如果我说 select distinct id, flavor from bageltown order by id, flavor='lox' desc, flavor 我得到一个错误,一个元素在distinct子句中不存在 当然,这是通过编辑查询来解决的,如下所示: select distinct id, flavor='lox', flavo

假设我有

select distinct id, flavor from bageltown order by id, flavor
这很有效

但如果我说

select distinct id, flavor from bageltown order by id, flavor='lox' desc, flavor
我得到一个错误,一个元素在distinct子句中不存在

当然,这是通过编辑查询来解决的,如下所示:

select distinct id, flavor='lox', flavor from bageltown order by id, flavor='lox' desc, flavor

但是我想知道-为什么需要将布尔列添加到输出中?

使用
DISTINCT
(而不是
DISTINCT ON
)的目的是删除结果表中的重复行。在您的特定情况下,这可能不是一个问题(因为您在结果表中有
id
),但如果您按
flavor='lox'
进行排序,并且
flavor='lox'
不是结果列,则无法保证没有表示这些行(如果不是为了删除重复项)既有
flavor='lox'
又有
flavor'lox'
,现在还不清楚它们应该如何分类。如果您将
flavor='lox'
'flavor'lox'
视为单独的行,那么您将返回到表中的重复行。

这很有意义!重复数据消除过程具有破坏性,因此它可能会删除与排序相关的行,也可能不会,因此它不知道如何对其进行排序。