Как сортировать сначала по уникальным значениям затем остальные?

В PostgreSQL для сортировки сначала по уникальным значениям, а затем по остальным значениям можно использовать несколько подходов. Рассмотрим несколько возможных решений.

1. Использование подзапроса с объединением (UNION):

SELECT DISTINCT column_name
FROM table_name
ORDER BY column_name
UNION
SELECT column_name
FROM table_name
ORDER BY column_name;

В данном случае сначала выбираются уникальные значения из колонки column_name (используя оператор DISTINCT), затем идет объединение с неуникальными значениями и сортировка по колонке column_name.

2. Использование выражения CASE:

SELECT column_name
FROM table_name
ORDER BY CASE WHEN column_name IS NULL THEN 1 ELSE 0 END, column_name;

В данном случае используется выражение CASE, которое проверяет, является ли значение в колонке column_name уникальным (равным NULL). Если значение NULL, то присваивается 1, иначе 0. Затем выполняется сортировка по этому выражению CASE, а затем по самой колонке column_name.

3. Использование подзапроса с внешним JOIN:

SELECT t1.column_name
FROM (
    SELECT column_name, COUNT(*) AS count
    FROM table_name
    GROUP BY column_name
) t1
LEFT JOIN (
    SELECT column_name, COUNT(*) AS count
    FROM table_name
    GROUP BY column_name
) t2
ON t1.column_name = t2.column_name
ORDER BY t2.count IS NULL, t2.count DESC, t1.column_name;

В данном случае выполняется подзапрос с группировкой по колонке column_name, который создает временную таблицу t1 с колонками column_name и count, где count - количество повторений каждого значения column_name. Затем выполняется внешний JOIN с другим подзапросом, создающим временную таблицу t2 с таким же набором данных. В результате получается таблица с двумя колонками column_name и count, где count будет NULL для уникальных значений. Затем выполняется сортировка по трем условиям: первое - сортировка по тому, что count является NULL, второе - сортировка по count в убывающем порядке, третье - сортировка по самой колонке column_name.

У каждого из этих подходов есть свои особенности, и выбор конкретного решения может зависеть от конкретного случая.