Коли ти працюєш з базами даних, часто треба бачити порядок у даних. Наприклад:
- "Покажи мені топ-10 найдорожчих продуктів."
- "Які замовлення були останніми?"
- "Який вік учнів, починаючи з наймолодших?"
Бажання впорядкувати дані цілком природне: навіть якщо ти суперкрутий програміст, розгрібати хаотичний набір рядків — не найприємніше заняття. Саме тому SQL дає нам інструмент для сортування рядків у повернутому результаті — оператор ORDER BY.
Основи сортування з ORDER BY
ORDER BY — це чарівна паличка, яка дозволяє впорядковувати рядки у результуючому наборі. Без неї дані повертаються у "довільному" порядку (це не помилка бази даних, просто порядок не гарантується).
Ось як виглядає синтаксис ORDER BY:
SELECT колонка1, колонка2
FROM таблиця
ORDER BY колонка1 DESC;
колонка1: ім'я стовпця, за яким ти хочеш сортувати.ASC: сортування за зростанням (це значення за замовчуванням, тому можеш його не писати).DESC: сортування за спаданням.
Приклад
Припустимо, у нас є таблиця students:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Давай відсортуємо студентів за віком (за зростанням):
SELECT name, age
FROM students
ORDER BY age ASC;
Результат:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Якщо змінити напрямок сортування на спадний:
SELECT name, age
FROM students
ORDER BY age DESC;
Результат буде таким:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Сортування по кількох стовпцях
Іноді одного стовпця для сортування недостатньо. Уяви, що в базі кілька студентів одного віку, і ти хочеш додати додаткове впорядкування, наприклад, за ім'ям.
Сортування по кількох стовпцях:
SELECT колонка1, колонка2
FROM таблиця
ORDER BY колонка1 DESC, колонка2 ASC;
Наведемо приклад для такої таблиці:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Запит:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Результат:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Тут спочатку йде сортування за віком (за зростанням), а всередині кожного віку — за ім'ям в алфавітному порядку.
Сортування з псевдонімами
Якщо ти використовуєш псевдоніми (аліаси) для стовпців, ти можеш також сортувати за цими псевдонімами.
SELECT name AS "Ім'я", age AS "Вік"
FROM students
ORDER BY "Вік" DESC;
Результат:
| Ім'я | Вік |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Чому це важливо? Бо раніше цього не було, і були складнощі з сортуванням по обчислюваних стовпцях.
Сортування з обчислюваними стовпцями
SQL дозволяє робити обчислення прямо в запиті, а потім сортувати за результатами цих обчислень.
Приклад 1. Найпростіший розрахунок
SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;
Результат:
| name | age | doubled_age |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Приклад 2. Використання функцій. Припустимо, ми зберігаємо ціни на продукти у таблиці products:
| product_name | price |
|---|---|
| Товар A | 100 |
| Товар B | 200 |
| Товар C | 150 |
А тепер сортуємо за округленою ціною, помноженою на 0.9 (наприклад, з урахуванням знижки). Функція ROUND повертає число, округлене до потрібного знаку після коми.
SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;
Ось такий буде результат:
| product_name | price | discounted_price |
|---|---|---|
| Товар A | 100 | 90 |
| Товар C | 150 | 135 |
| Товар B | 200 | 180 |
Практичне застосування сортування
Сортування грає ключову роль у таких сценаріях:
- Побудова звітів, наприклад, топ-10 найкращих продажів за місяць.
- Вивід даних для користувацьких інтерфейсів, наприклад, список замовлень, відсортований за датою.
- Генерація списків для аналітики, наприклад, виділення груп за пріоритетом.
Типові помилки при використанні ORDER BY
Помилки можуть чекати на кожному кроці. Ось кілька моментів, на які варто звернути увагу:
- Якщо ти намагаєшся сортувати за стовпцем, якого не існує, отримаєш помилку:
column "not_a_column" does not exist. - Сортування за псевдонімом, який використовується у обчислюваному стовпці, може бути заплутаним, якщо псевдонім заданий на рівні вище.
- Якщо ти випадково забудеш вказати напрямок сортування, PostgreSQL за замовчуванням застосує
ASC. Це не помилка, але може призвести до неочікуваних результатів.
Тепер ти знаєш, як керувати сортуванням у PostgreSQL за допомогою ORDER BY. Запам'ятай, що правильно організовані дані — це половина успіху при створенні ефективних SQL-запитів. Вперед до наступної теми! 😉
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ