如何从 select 查询输出中使用不区分大小写的条件编写 select 语句

How to write select statement with a condition of case-insensitive from a select query output

我得到这样的数据

来自查询select distinct(trim(name)) as loc from locations order by trim(name)

现在我想使用 lower() 或 upper() 和 select 第一条记录删除重复项。 如果我像下面这样使用较低的功能,

select distinct(lower(A.loc)) from( select distinct(trim(name)) as loc from locations order by trim(name) ) as A order by lower(A.loc);

它给出的结果转换为如下所示。

demo:db<>fiddle

SELECT DISTINCT ON (lower(city))
    city
FROM
    cities

DISTINCT ON 获取任意列并给出第一个重复项。在这种情况下,在内部创建了一个全小写的列。然后取第一条记录,但只取原始列。


注意您没有特殊订单。它将采用随机顺序(例如,数据在内部存储的方式)。要获得大写值,您必须编写:

SELECT DISTINCT ON (lower(city))
    city
FROM
    cities
ORDER BY lower(city), city DESC

demo:db<>fiddle

ORDER BY lower(city) 是必需的,因为 DISTINCT ON 需要给定的列排在第一位。之后,您可以按任何其他列进行排序。 ORDER BY column DESC 将大写字母移到顶部。