首页 > 解决方案 > 为什么我不能通过 select distincts 使用相等顺序?

问题描述

假设我有

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

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

标签: postgresql

解决方案


DISTINCT(而不是)的目的DISTINCT ON是删除结果表中的重复行。在您的特定情况下,这可能不是问题(因为您已经id在结果表中),但是如果您按排序flavor='lox'并且flavor='lox'不是结果列,则不能保证没有代表某些行(如果它不是为了删除重复项)同时具有flavor='lox'and flavor<>'lox',目前尚不清楚应该如何对它们进行排序。如果您将flavor='lox''flavor<>'lox'视为单独的行,那么您将回到表中有重复的行。


推荐阅读