Один із найпопулярніших сценаріїв роботи з базами даних — підготовка даних для звітності. Уяви ситуацію: ти працюєш в університеті, і твій начальник (який, звісно, нічого не тямить у SQL) просить тебе зробити список студентів з об'єднанням імені та прізвища, а ще вказати дату народження у форматі DD-MM-YYYY. Задача зрозуміла: треба красиво оформити дані. І тут SQL — наш вірний помічник.
Приклад 1: Об'єднання імені та прізвища
Почнемо з об'єднання імені (first_name) та прізвища (last_name) студентів з нашої таблиці students.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name
FROM
students;
Що тут відбувається?
CONCAT()об'єднує рядки. Ми додаємо пробіл між іменем і прізвищем для наочності.- Результат зберігається в новому стовпці
full_name.
Результат може виглядати так:
| full_name |
|---|
| Otto Art |
| Anna Song |
| Pol Mac |
Приклад 2: Форматування дати
Тепер додамо до нашого запиту форматування дати народження.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students;
Нове тут:
- Ми застосовуємо функцію
TO_CHAR()до поляbirth_date. - Формат
'DD-MM-YYYY'перетворює дату у зручний вигляд (наприклад:25-12-2001).
Результат:
| full_name | formatted_birth_date |
|---|---|
| Otto Art | 12-04-1995 |
| Anna Song | 03-08-1996 |
| Pol Mac | 21-11-1997 |
Вуаля! Ти щойно зробив гарний звіт.
Форматування для експорту даних
Уявімо, що один із твоїх колег хоче вивантажити дані про замовлення у CSV-файл для подальшої роботи в Excel. Але дані в базі зберігаються у незручному для нього форматі, а люди з відділу продажів вимагають конкретного вигляду. Наприклад, замість поля total_price, де вказана ціна замовлення, вони хочуть бачити її у форматі: $100.00.
Приклад 3: Перетворення чисел у формат валюти
Оформимо дані про замовлення з таблиці orders для експорту:
SELECT
order_id,
TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM
orders;
Що робить TO_CHAR() у цьому випадку?
FM(Fill Mode) прибирає зайві пробіли.$додає символ валюти.999,999.00задає формат з тисячними роздільниками і двома знаками після крапки.
Результат:
| order_id | formatted_price |
|---|---|
| 1 | $1,000.00 |
| 2 | $2,500.50 |
| 3 | $10.00 |
Тепер твій колега може легко імпортувати дані в Excel і похвалити тебе на мітингу.
Фінальне завдання
Ось тут починається найцікавіше. Давай об'єднаємо всі навички, які ти вже освоїв.
Завдання
Створи запит для таблиці students, який:
- Об'єднує ім'я та прізвище в один стовпець
full_name. - Перетворює дату народження у формат
DD-MM-YYYY. - Відображає вік студента на поточну дату.
Запит буде виглядати приблизно так:
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
DATE_PART('year', AGE(birth_date)) AS age
FROM
students;
Нові елементи:
AGE(birth_date)повертає інтервал між поточною датою і датою народження, але у форматі років, місяців і днів.DATE_PART('year', AGE(birth_date))витягує з цього інтервалу тільки кількість років.
Результат:
| full_name | formatted_birth_date | age |
|---|---|---|
| Otto Art | 12-04-1995 | 28 |
| Anna Song | 03-08-1996 | 27 |
| Pol Mac | 21-11-1997 | 25 |
Такий звіт задовольнить навіть найприскіпливіших колег.
Форматування для специфічних умов
Іноді форматування даних потрібно для створення умов або фільтрації. Наприклад, дістанемо студентів, у яких день народження припадає на поточний місяць.
Приклад 4: Фільтрація за місяцем
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
WHERE
DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);
Як це працює?
DATE_PART('month', birth_date)витягує місяць з дати народження.CURRENT_DATEдає поточну дату. Ми беремо з неї місяць за допомогоюDATE_PART().
Поєднання форматування і сортування
Тепер об'єднаємо все, що дізналися, і додамо сортування. Наприклад, зробимо список студентів, відсортованих за їхньою датою народження.
Приклад 5: Сортування за датою народження
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
ORDER BY
birth_date ASC;
Сортування у порядку зростання ASC покаже спочатку найстарших студентів, а у порядку спадання DESC — наймолодших.
Поєднання з унікальними значеннями
Наостанок — задача із зірочкою. Уяви, що в нашого університету є філії у кількох містах, і тобі треба зробити список унікальних міст, де навчаються студенти, але в алфавітному порядку.
Приклад 6: Унікальні значення і сортування
SELECT DISTINCT
city
FROM
students
ORDER BY
city ASC;
Що робить DISTINCT?
Він прибирає дублікати, щоб у результатах було вказано кожне місто лише один раз.
Навіщо це все потрібно?
Зручність і краса. Коли дані оформлені гарно, з ними простіше працювати, а начальники менше задають питань.
Готовність до реального життя. Ти зможеш автоматично генерувати звіти, працювати з експортами і готувати круті презентації.
Підвищення твоєї цінності. SQL — це не просто про дані. Це про те, як зробити їх зрозумілими і корисними.
Використовуй отримані навички, щоб не просто писати запити, а створювати шедеври! На наступних лекціях ми продовжимо занурюватися у магію PostgreSQL.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ