@Skilk

Postgre Sql DISTINCT массив с ORDER BY?

Необходимо из заказов выбрать уникальные комментарии и вывести первые 3 слова, с сортировкой по 2 слову.
Вот что у меня получилось
select DISTINCT (regexp_split_to_array(commend, E'\\s+'))[:3] from orders ORDER BY (regexp_split_to_array(commend, E'\\s+'))[2];

Но оно не исполняется
ОШИБКА: в конструкции SELECT DISTINCT выражения ORDER BY должны быть в списке выборки
  • Вопрос задан
  • 666 просмотров
Пригласить эксперта
Ответы на вопрос 2
@galaxy
select * from (
  select DISTINCT (regexp_split_to_array(commend, E'\\s+'))[:3] as words from orders
) t
 order by words[2]

https://www.db-fiddle.com/f/rKStiRfEcWZbJJ9ZJXGDZT/0

Но имейте в виду, что в данном случае SELECT DISTINCT выберет не уникальные комменты, а уникальные первые три слова.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
DISTINCT - это фактически частная форма GROUP BY. А потому к ней относятся все ограничения для GROUP BY в части использования полей источника данных в оконных функциях, выражениях пост-отбора и сортировки.

Посему используйте поле выходного набора для сортировки.
SELECT DISTINCT (regexp_split_to_array(commend, E'\\s+'))[:3] AS first_3_words
FROM orders 
ORDER BY first_3_words[2];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы