Сортировка и форматирование данных — важные навыки, которые позволяют подготавливать удобочитаемые отчёты, оптимизировать анализ данных и улучшать взаимодействие с пользователями. Эти знания пригодятся вам при создании аналитических отчетов, подготовке данных для экспорта, а также в повседневной работе с базами данных. На практике вы часто сталкиваетесь с задачами, где данные нужно красиво отформатировать, удалить дублирующиеся записи и отсортировать информацию для удобства восприятия. Именно этим мы сегодня и займёмся!
Пример 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 |
Наша цель:
- Объединить
first_nameиlast_nameв один столбецfull_name. - Извлечь только уникальных клиентов.
- Отсортировать список по фамилии (
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 |
Наша цель:
- Создать столбец
formatted_order_date, где дата заказа будет в формате DD-MM-YYYY. - Удалить дублирующиеся записи клиента и даты (оставить уникальные комбинации
customer_nameиorder_date). - Отсортировать заказы по дате в порядке убывания.
- 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 |
- Создайте столбец
formatted_product, в которомproduct_nameбудет объединено с категорией через дефис, например:Телефон - Электроника. - Удалите дублирующиеся комбинации
product_nameиcategory. - Отсортируйте товары по категории, а затем по цене (от самой дешевой к самой дорогой).
Ниже предлагается структура запроса для выполнения задания:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Попробуйте самостоятельно представить результат работы этого запроса!
Использование функций CONCAT(), DISTINCT и ORDER BY позволяет добиваться высокой читаемости и структурированности данных, что критически важно в реальных проектах и задачах. Убедитесь, что вы понимаете, как их комбинировать, практикуясь на примерах!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ