JavaRush /Курси /SQL SELF /Числові типи даних: INTEGER, NUMERIC...

Числові типи даних: INTEGER, NUMERIC, FLOAT

SQL SELF
Рівень 15 , Лекція 1
Відкрита

Сьогодні поговоримо про числові типи даних у PostgreSQL. Якщо ти колись думав, як зберігати число "42", фінансові розрахунки або, може, мілісекунди — ти за адресою. Давай розбиратись, який тип підходить для кожної задачі, щоб ти і твої дані почували себе комфортно.

Числові типи даних у PostgreSQL діляться на три основні групи:

  1. Цілі числа (INTEGER): для зберігання чисел без дробової частини. Це звичні числа типу 1, 42, -7.
  2. Точні числа (NUMERIC): для зберігання чисел з фіксованою кількістю знаків після коми. Корисно для фінансових розрахунків, де точність важливіша за життя.
  3. Числа з плаваючою комою (REAL): для зберігання чисел, які можуть бути дуже великими або мега малими. Вони менш точні, ніж NUMERIC, але підходять для наукових обчислень.

Тип INTEGER

INTEGER — це тип даних для цілих чисел. Підходить для випадків, коли треба зберігати числа без дробової частини. PostgreSQL дає аж три різновиди INTEGER, щоб покрити різні діапазони:

  • SMALLINT: маленький цілочисельний тип. Діапазон: від -32,768 до 32,767.
  • INTEGER (або INT): стандартний цілочисельний тип. Діапазон: від -2,147,483,648 до 2,147,483,647.
  • BIGINT: для великих чисел. Діапазон: від -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.

Уявімо, що у нас є таблиця students, де зберігається інфа про студентів: їх ім'я, вік і кількість набраних кредитів (академічних балів):

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

Тепер зробимо простий SQL-запит, щоб отримати список студентів з їх віком і кількістю кредитів:

SELECT name, age, credits
FROM students;

Результат:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

Коли юзати INTEGER?

  • Зберігання ідентифікаторів (id, номер замовлення).
  • Зберігання кількості чогось (наприклад, кількість товарів на складі, кількість студентів).

Тип NUMERIC

NUMERIC — це тип даних для точних чисел з фіксованою комою. Якщо треба зберігати щось типу 123.456, і помилка в одному знаку після коми коштуватиме тобі репутації (або грошей), юзай NUMERIC.

Формат оголошення: NUMERIC(precision, scale), де:

  • precision — загальна кількість цифр (і до, і після коми).
  • scale — кількість цифр після коми.

Наприклад, NUMERIC(6, 2) дозволяє зберігати числа з максимум 6 цифрами і 2 з них після коми.

Створимо таблицю для обліку фінансових транзакцій:

id description amount
1 Оплата за навчання 2345.67
2 Щомісячна стипендія 500.00
3 Збір за лабораторію 145.99
4 Штраф за бібліотеку 12.75
5 Реєстрація на конференцію 320.50

Тепер виведемо список транзакцій:

SELECT description, amount
FROM transactions;

Результат:

description amount
Оплата за навчання 2345.67
Щомісячна стипендія 500.00
Збір за лабораторію 145.99
Штраф за бібліотеку 12.75
Реєстрація на конференцію 320.50

Коли юзати NUMERIC?

  • Фінансові розрахунки (вартість товарів, зарплати).
  • Зберігання точних вимірювань (вага, довжина).

Таблиця measurements

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

Тепер виведемо значення:

SELECT mass, height
FROM measurements;

Результат:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

Коли юзати REAL?

  • Наукові обчислення (маса атомів, відстань до Місяця).
  • Моделювання даних, де похибки ок.

Порівняння числових типів: що коли юзати?

Тип даних Діапазон Точність Приклади застосування
SMALLINT -32,768 до 32,767 Цілі числа Невеликі числа (вік, рейтинги).
INTEGER -2,147,483,648 до 2,147,483,647 Цілі числа Ідентифікатори, кількості.
BIGINT -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 Цілі числа Дуже великі числа.
NUMERIC Залежить від precision і scale Точні десяткові числа Фінанси, вимірювання.
REAL Приблизно 6 десяткових знаків Плаваюча кома Приблизні або наукові дані.
DOUBLE PRECISION Приблизно 15 десяткових знаків Високоточна плаваюча кома Наука, дослідження.

Псевдоніми

У PostgreSQL у багатьох числових типів є аліаси (синоніми) — це альтернативні назви типів, які поводяться однаково, але покращують читабельність або сумісність з іншими СУБД.

Ось короткий і зрозумілий гайд по аліасам числових типів у PostgreSQL:

Аліаси для цілочисельних типів

Аліас Реальний тип Розмір Діапазон
INT INTEGER 4 байти −2,147,483,648 до 2,147,483,647
INT4 INTEGER 4 байти (застарілий аліас)
SMALLINT SMALLINT 2 байти −32,768 до 32,767
INT2 SMALLINT 2 байти
BIGINT BIGINT 8 байт −9 квінтильйонів до +9 квінтильйонів
INT8 BIGINT 8 байт

Аліаси для точних чисел

Аліас Реальний тип Призначення
DEC NUMERIC Синонім по SQL-стандарту
DECIMAL NUMERIC Те ж саме

Аліаси для чисел з плаваючою комою

Аліас Реальний тип Точність
FLOAT DOUBLE PRECISION ~15 знаків (за замовчуванням)
FLOAT(24) REAL ~6 знаків
FLOAT(53) DOUBLE PRECISION ~15 знаків
FLOAT8 DOUBLE PRECISION Застарілий аліас
FLOAT4 REAL Застарілий аліас

Типові помилки

Працюючи з числовими типами, можна натрапити на кілька підводних каменів:

Вибір недостатнього типу даних. Якщо для віку людей ти юзаєш SMALLINT, помиляєшся. Роботу з "Матриці", у якого вік мільйони років, прикро.

Втрата даних при округленні. Якщо юзати REAL у фінансових розрахунках, можна втратити копійки. А потім і довіру клієнтів.

Порівняння різних типів. Якщо порівнювати INTEGER і REAL, можна отримати неочікувані результати через особливості представлення чисел з плаваючою комою.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ