Уяви собі... В тебе є довжелезний список покупок із супермаркету. Ти хочеш підрахувати, скільки в результаті витратив грошей. Не будеш же ти все складати вручну, правда? А от у продавців все вже в базі даних. Тому ти отримуєш фінальний чек із правильною сумою. Швидше за все, десь у їхньому додатку їм допомагає героїня нашої сьогоднішньої лекції — функція SUM()! Це агрегатна функція, яка дозволяє складати значення в колонці числового типу.
Синтаксис SUM()
Функція SUM() виглядає так само просто, як і її назва, але давай розберемо все по частинах:
SELECT SUM(стовпець)
FROM таблиця;
Функція бере всі значення у вказаному стовпці й підсумовує їх. Але, скажу прямо: ніякого магічного складання текстів чи дат тут не буде! Тільки числа.
Приклади використання SUM()
Давай почнемо з простого прикладу. Ми будемо працювати з таблицею salaries, яка зберігає зарплати співробітників:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
Приклад 1: Сумування всіх зарплат
Ти хочеш дізнатися загальний фонд заробітної плати компанії. Ось як це зробити:
SELECT SUM(salary) AS total_salary
FROM salaries;
Результат:
| total_salary |
|---|
| 240000 |
Що тут сталося? PostgreSQL склав всі значення зі стовпця salary (50000 + 60000 + 55000 + 75000) і повернув результат у новому стовпці з назвою total_salary.
Приклад 2: Сумування з умовою
Припустимо, ти хочеш дізнатися загальну зарплату тільки співробітників, які отримують більше 55,000. Згадаємо наш улюблений оператор WHERE:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
Результат:
| high_salary_total |
|---|
| 135000 |
Що сталося тут? Спочатку PostgreSQL застосував фільтр WHERE salary > 55000, залишивши тільки рядки із зарплатами 60000 і 75000. Потім він склав ці дві зарплати (60000 + 75000).
3. Особливості роботи SUM()
Як NULL впливає на SUM()? Як ми вже бачили, NULL — це "нічого", і SUM() не включає його в розрахунки. Розглянемо таблицю:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
Якщо ми захочемо дізнатися загальний фонд зарплат:
SELECT SUM(salary) AS total_salary
FROM salaries;
Результат:
| total_salary |
|---|
| 185000 |
Чому "185000", а не "NULL"? PostgreSQL просто ігнорує NULL при підрахунку суми.
Приклади складних запитів з SUM()
Приклад 1: Сумування і фільтрація в одному запиті
Уяви таблицю sales, яка зберігає дані про продажі. Ось її структура:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
Ти хочеш дізнатися загальну суму продажів amount тільки для першого продукту product_id = 1:
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
Результат:
| total_sales |
|---|
| 150 |
Приклад 2: Сума і додаткові обчислення
Знову працюємо з таблицею salaries. Ти хочеш дізнатися, наскільки фонд зарплат перевищує 200,000:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
Результат:
| surplus |
|---|
| 40000 |
Типові помилки при використанні SUM()
Використання SUM() для нечислових даних: якщо ти випадково спробуєш підсумувати, наприклад, текстові значення, то отримаєш помилку. Будь уважний і перевіряй типи даних у своєму стовпці.
Ігнорування NULL: часто новачки забувають про NULL і думають, що він бере участь у розрахунках. Це може призвести до неочікуваних результатів.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ