我正在获取这样的数据
- 多哈
- 多哈
- 迪拜
- 阿布扎比
- 阿布扎比
来自查询select distinct(trim(name)) as loc from locations order by trim(name)
现在,我想使用下部((或upper((删除重复项,然后选择第一个记录。如果我使用下面的较低功能,
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);
它使结果转换为较低如下。
doha
迪拜
阿布扎比
,但我希望原始结果如前所述。
doha
迪拜
阿布扎比
demo:db<> fiddle
SELECT DISTINCT ON (lower(city))
city
FROM
cities
DISTINCT ON
采用任意列,并发出第一个重复项。在这种情况下,在所有较低情况下,内部创建了一个列。然后是第一个记录,但只有原始列。
Note 您没有特殊的订单。它将被随机顺序(例如,在内部存储数据(。要达到上限值,您必须写:
SELECT DISTINCT ON (lower(city))
city
FROM
cities
ORDER BY lower(city), city DESC
演示:db<>小提琴
ORDER BY lower(city)
是必要的,因为DISTINCT ON
需要给定的列是第一个排序。之后,您可以通过任何其他列订购。ORDER BY column DESC
移动上层外壳顶部。