JavaRush /Курсы /SQL SELF /Примеры форматирования и сортировки данных в реальных зад...

Примеры форматирования и сортировки данных в реальных задачах

SQL SELF
6 уровень , 3 лекция
Открыта

Сортировка и форматирование данных — важные навыки, которые позволяют подготавливать удобочитаемые отчёты, оптимизировать анализ данных и улучшать взаимодействие с пользователями. Эти знания пригодятся вам при создании аналитических отчетов, подготовке данных для экспорта, а также в повседневной работе с базами данных. На практике вы часто сталкиваетесь с задачами, где данные нужно красиво отформатировать, удалить дублирующиеся записи и отсортировать информацию для удобства восприятия. Именно этим мы сегодня и займёмся!

Пример 1: Создание списка уникальных клиентов с объединением имени и фамилии, отсортированного по фамилии

У нас есть таблица customers, в которой хранятся данные о клиентах:

id first_name last_name city
1 Alex Lin New York
2 Maria Chi Los Angeles
3 Alex Lin New York
4 Anna Song Chicago

Наша цель:

  1. Объединить first_name и last_name в один столбец full_name.
  2. Извлечь только уникальных клиентов.
  3. Отсортировать список по фамилии (last_name).

SQL-запрос

SELECT DISTINCT
    CONCAT(first_name, ' ', last_name) AS full_name,
    city
FROM customers
ORDER BY last_name;
full_name city
Maria Chi Los Angeles
Alex Lin New York
Anna Song Chicago

Обратите внимание, что дублирующиеся записи Alex Lin были удалены благодаря DISTINCT, а полный список был отсортирован по фамилии в алфавитном порядке.

Пример 2: Форматирование данных о заказах и их сортировка

В таблице orders хранятся данные о заказах:

order_id customer_name order_date total_amount
1 Alex Lin 2023-10-01 1500
2 Maria Chi 2023-10-02 2000
3 Alex Lin 2023-10-03 1500
4 Anna Song 2023-10-04 3000

Наша цель:

  1. Создать столбец formatted_order_date, где дата заказа будет в формате DD-MM-YYYY.
  2. Удалить дублирующиеся записи клиента и даты (оставить уникальные комбинации customer_name и order_date).
  3. Отсортировать заказы по дате в порядке убывания.
  4. SQL-запрос
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;

Результат:

customer_name formatted_order_date total_amount
Anna Song 04-10-2023 3000
Alex Lin 03-10-2023 1500
Maria Chi 02-10-2023 2000

Заметьте, как с помощью функции TO_CHAR() мы преобразовали дату в формат DD-MM-YYYY, а благодаря DISTINCT исключили дублирующие записи.

Пример 3: Извлечение уникальных комбинаций "имя + фамилия" студентов и сортировка по фамилии и дате рождения

В таблице students находятся данные о студентах:

student_id first_name last_name birth_date
1 Alex Lin 2001-03-15
2 Maria Chi 2000-06-20
3 Alex Lin 2001-03-15
4 Anna Song 1999-10-10

Наша цель:

  • Объединить имя и фамилию в один столбец full_name.
  • Извлечь уникальные комбинации "имя + фамилия".
  • Отсортировать студентов по фамилии, а затем по дате рождения.
SELECT DISTINCT
    CONCAT(first_name, ' ', last_name) AS full_name,
    birth_date
FROM students
ORDER BY last_name, birth_date;

Результат:

full_name birth_date
Maria Chi 2000-06-20
Alex Lin 2001-03-15
Anna Song 1999-10-10

Особое внимание: два одинаковых записа о студенте "Alex Lin" были объединены в одну строку, а упорядочивание осуществлено сначала по фамилии, затем по дате рождения.

Практическое задание

Примените знания, полученные сегодня, для решения следующей задачи:

Задача: У вас есть таблица products, которая содержит следующие данные:

product_id category product_name price
1 Электроника Телефон 50000
2 Одежда Куртка 8000
3 Электроника Ноутбук 70000
4 Одежда Куртка 8000
  1. Создайте столбец formatted_product, в котором product_name будет объединено с категорией через дефис, например: Телефон - Электроника.
  2. Удалите дублирующиеся комбинации product_name и category.
  3. Отсортируйте товары по категории, а затем по цене (от самой дешевой к самой дорогой).

Ниже предлагается структура запроса для выполнения задания:

SELECT DISTINCT
    CONCAT(product_name, ' - ', category) AS formatted_product,
    price
FROM products
ORDER BY category, price ASC;

Попробуйте самостоятельно представить результат работы этого запроса!

Использование функций CONCAT(), DISTINCT и ORDER BY позволяет добиваться высокой читаемости и структурированности данных, что критически важно в реальных проектах и задачах. Убедитесь, что вы понимаете, как их комбинировать, практикуясь на примерах!

2
Задача
SQL SELF, 6 уровень, 3 лекция
Недоступна
Форматирование и сортировка списка студентов
Форматирование и сортировка списка студентов
2
Задача
SQL SELF, 6 уровень, 3 лекция
Недоступна
Уникальные заказы с форматированием клиентов
Уникальные заказы с форматированием клиентов
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anemon Уровень 13 Expert
7 августа 2025
Что-то непонятное внизу пишут, я всё сделал по заданию и нигде никаких странных моментов не увидел. Непонятно... о-о С другой стороны, под курсом Java было невероятно много тех, кто не понимал простейшие темы. Ну и я сам тоже был среди них не редко.
Ra Уровень 35 Student
20 июля 2025
Интересно, если нужны другие колонки, как указать, что их надо получить
Мария Уровень 13
20 июля 2025
Корректны ли примеры в лекции? Мы ищем уникальные комбинации значений из двух колонок, а в запросе перечислены 3
Анжелика Уровень 1
20 августа 2025
DISTINCT() убирает дубликаты по всем столбцам. Так запрограммировано. Иначе надо специальные функции использовать.
Alexandr Уровень 16
30 июня 2025
SELECT DISTINCT customer_name, TO_CHAR(order_date, 'DD.MM.YYYY') AS formatted_order_date, total_amount FROM orders ORDER BY formatted_order_date DESC;
Alexandr Уровень 16
30 июня 2025
Используйте DISTINCT для устранения дубликатов. Необходимо использовать DISTINCT вместо DISTINCT ON для удаления дубликатов. Ошибки и тут же в задании читаем -- -- Используем DISTINCT ON для удаления дубликатов по customer_name и order_date
DragonIT Уровень 11
27 июня 2025
Если взять задачу из примера - она не компилируется :)