Как написать оператор выбора с условием нечувствительности к регистру из вывода запроса select
Я получаю такие данные
- Доха
- доха
- Дубай
- Абу Даби
- Абу Даби
из запроса select distinct(trim(name)) as loc from locations order by trim(name)
Теперь я хочу удалить дубликаты с помощью lower() или 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);
это дает результат, преобразованный в более низкий, как показано ниже.
- доха
- дубаи
Абу Даби
Но я хочу оригинальный результат, как уже упоминалось ранее.
- Доха
- Дубай
- Абу Даби
1 ответ
SELECT DISTINCT ON (lower(city))
city
FROM
cities
DISTINCT ON
берет произвольный столбец и выдает первый из дубликатов. В этом случае столбец создается внутри со всеми строчными буквами. Затем берется первая запись, но только исходный столбец.
ПРИМЕЧАНИЕ. У вас нет особого заказа. Будет принят случайный порядок (например, как данные хранятся внутри). Чтобы получить значение в верхнем регистре, вы должны написать:
SELECT DISTINCT ON (lower(city))
city
FROM
cities
ORDER BY lower(city), city DESC
ORDER BY lower(city)
необходимо, потому что DISTINCT ON
нужны данные столбцы, чтобы быть первым заказанным. После этого вы можете заказать любой другой столбец. ORDER BY column DESC
перемещает верхний регистр сверху.