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'
视为单独的行,那么您将返回到表中的重复行。这很有意义!重复数据消除过程具有破坏性,因此它可能会删除与排序相关的行,也可能不会,因此它不知道如何对其进行排序。