Как написать оператор выбора с условием нечувствительности к регистру из вывода запроса select - PullRequest
0 голосов
/ 07 мая 2019

Я получаю такие данные

  • Doha
  • доха
  • Дубай
  • Абу-Даби
  • Абу-Даби

из запроса 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);

это дает результат, преобразованный в более низкий, как показано ниже.

  • доха
  • дубаи
  • Абу-Даби

    Но я хочу оригинальный результат, как упоминалось ранее.

  • Doha
  • Дубай
  • Абу-Даби

1 Ответ

1 голос
/ 07 мая 2019

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 перемещает верхний регистр.

...