В PostgreSQL оператор DISTINCT можно использовать не только после слова SELECT для вывода уникальных строк всего набора данных, и не только внутри агрегатных функций, но ещё и для вывода лишь одной строки из нескольких, которые имеют одинаковое значение в указанном столбце (столбцах). В этом случае, с помощью ORDER BY можно определить какую именно из выводящихся строк с одинаковым значением в указанном столбце или столбцах, нужно вывести.
В отличие от обычного DISTINCT, который убирает дубликаты по всем полям в SELECT, DISTINCT ON (<столбец или набор столбцов>) выбирает первую строку для каждой группы значений в указанном в скобочках столбце (или наборе столбцов).
Так можно вывести последний заказ каждого пользователя:
SELECT DISTINCT ON (user_id) user_id, order_id, order_date, amount FROM orders ORDER BY user_id, order_date DESC;
2. Можно выводить строки без столбцов
Это ещё одна особенность PostgreSQL. Запросы SELECT, в которых не указаны ни поля после слова SELECT, ни звёздочка, прекрасно выполняются. Пример на PostgreSql версии 16.5:
И даже chatgpt об этом (пока ещё) не знает.
3. С помощью GENERATE_SERIES можно на лету генерировать динамические таблицы чисел, дат, дней недели и другую информацию
Вывести дни недели можно следующим способом:
А так, например, можно вывести все числа января и февраля:
Продолжая предыдущий пример, можно добавить вывод количеств посещений сайта prime-soft.biz в выводимые даты:
Напиши под постом что удивило в PostgreSql именно тебя. Буду очень рад, если поделишься опытом! И, конечно, буду рад, твоему лайку моей статье! А ещё у меня есть Телеграм канал, в котором регулярно решаем задачи по SQL с собеседований и реальной практики!