Сортування та форматування даних — важливі скіли, які дозволяють готувати зручні для читання звіти, оптимізувати аналіз даних і покращувати взаємодію з користувачами. Ці знання знадобляться тобі при створенні аналітичних звітів, підготовці даних для експорту, а також у повсякденній роботі з базами даних. На практиці ти часто стикаєшся із задачами, де дані треба красиво відформатувати, видалити дублікати записів і відсортувати інформацію для зручності сприйняття. Саме цим ми сьогодні й займемося!
Приклад 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 дозволяє досягати високої читабельності та структурованості даних, що критично важливо у реальних проектах і задачах. Переконайся, що ти розумієш, як їх комбінувати, практикуючись на прикладах!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ