CodeGym /Kursy /SQL SELF /Typy danych liczbowych: INTEGER, NUMERIC, FLOAT

Typy danych liczbowych: INTEGER, NUMERIC, FLOAT

SQL SELF
Poziom 15, Lekcja 1
Dostępny

Dzisiaj pogadamy o typach liczbowych w PostgreSQL. Jeśli kiedykolwiek zastanawiałeś się, jak przechować liczbę "42", rozliczenia finansowe albo może milisekundy — jesteś w dobrym miejscu. Zobaczmy, który typ pasuje do jakiego zadania, żebyś Ty i Twoje dane czuli się komfortowo.

Typy liczbowe w PostgreSQL dzielą się na trzy główne grupy:

  1. Liczby całkowite (INTEGER): do przechowywania liczb bez części ułamkowej. To takie zwykłe liczby jak 1, 42, -7.
  2. Liczby dokładne (NUMERIC): do przechowywania liczb ze stałą liczbą miejsc po przecinku. Przydatne do rozliczeń finansowych, gdzie dokładność jest ważniejsza niż życie.
  3. Liczby zmiennoprzecinkowe (REAL): do przechowywania liczb, które mogą być bardzo duże albo niesamowicie małe. Są mniej dokładne niż NUMERIC, ale nadają się do obliczeń naukowych.

Typ INTEGER

INTEGER — to typ danych dla liczb całkowitych. Nadaje się, gdy trzeba przechować liczby bez części ułamkowej. PostgreSQL daje aż trzy warianty INTEGER, żeby ogarnąć różne zakresy:

  • SMALLINT: mały typ całkowity. Zakres: od -32,768 do 32,767.
  • INTEGER (albo INT): standardowy typ całkowity. Zakres: od -2,147,483,648 do 2,147,483,647.
  • BIGINT: dla dużych liczb. Zakres: od -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807.

Wyobraź sobie, że mamy tabelę students, gdzie trzymamy info o studentach: ich imię, wiek i liczbę zdobytych punktów (kredytów akademickich):

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

Teraz wykonamy prosty zapytanie SQL, żeby dostać listę studentów z ich wiekiem i liczbą kredytów:

SELECT name, age, credits
FROM students;

Wynik:

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

Kiedy używać INTEGER?

  • Przechowywanie identyfikatorów (id, numer zamówienia).
  • Przechowywanie ilości czegoś (np. liczba produktów w magazynie, liczba studentów).

Typ NUMERIC

NUMERIC — to typ danych dla dokładnych liczb ze stałą przecinkiem. Jeśli musisz przechować coś jak 123.456 i błąd w jednym miejscu po przecinku kosztuje Cię reputację (albo kasę), użyj NUMERIC.

Format deklaracji: NUMERIC(precision, scale), gdzie:

  • precision — całkowita liczba cyfr (zarówno przed, jak i po przecinku).
  • scale — liczba cyfr po przecinku.

Na przykład, NUMERIC(6, 2) pozwala przechować liczby z maksymalnie 6 cyframi, z czego 2 po przecinku.

Stwórzmy tabelę do rejestracji transakcji finansowych:

id description amount
1 Oplata za naukę 2345.67
2 Miesięczne stypendium 500.00
3 Opłata za laboratorium 145.99
4 Kara za bibliotekę 12.75
5 Rejestracja na konferencję 320.50

Teraz wyświetlimy listę transakcji:

SELECT description, amount
FROM transactions;

Wynik:

description amount
Oplata za naukę 2345.67
Miesięczne stypendium 500.00
Opłata za laboratorium 145.99
Kara za bibliotekę 12.75
Rejestracja na konferencję 320.50

Kiedy używać NUMERIC?

  • Rozliczenia finansowe (ceny produktów, pensje).
  • Przechowywanie dokładnych pomiarów (waga, długość).

Tabela 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

Teraz wyświetlimy wartości:

SELECT mass, height
FROM measurements;

Wynik:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

Kiedy używać REAL?

  • Obliczenia naukowe (masa atomów, odległość do Księżyca).
  • Modelowanie danych, gdzie błędy są akceptowalne.

Porównanie typów liczbowych: co kiedy używać?

Typ danych Zakres Dokładność Przykłady użycia
SMALLINT -32,768 do 32,767 Liczby całkowite Małe liczby (wiek, oceny).
INTEGER -2,147,483,648 do 2,147,483,647 Liczby całkowite Identyfikatory, ilości.
BIGINT -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 Liczby całkowite Bardzo duże liczby.
NUMERIC Zależy od precision i scale Dokładne liczby dziesiętne Finanse, pomiary.
REAL Około 6 miejsc dziesiętnych Zmiennoprzecinkowy Przybliżone lub naukowe dane.
DOUBLE PRECISION Około 15 miejsc dziesiętnych Wysoka dokładność zmiennoprzecinkowa Nauka, badania.

Pseudonimy

W PostgreSQL wiele typów liczbowych ma aliasy (synonimy) — to alternatywne nazwy typów, które działają tak samo, ale poprawiają czytelność lub kompatybilność z innymi bazami danych.

Oto krótkie i jasne kompendium aliasów typów liczbowych w PostgreSQL:

Alias dla typów całkowitych

Alias Prawdziwy typ Rozmiar Zakres
INT INTEGER 4 bajty −2,147,483,648 do 2,147,483,647
INT4 INTEGER 4 bajty (przestarzały alias)
SMALLINT SMALLINT 2 bajty −32,768 do 32,767
INT2 SMALLINT 2 bajty
BIGINT BIGINT 8 bajtów −9 kwintylionów do +9 kwintylionów
INT8 BIGINT 8 bajtów

Alias dla liczb dokładnych

Alias Prawdziwy typ Przeznaczenie
DEC NUMERIC Synonim wg standardu SQL
DECIMAL NUMERIC To samo

Alias dla liczb zmiennoprzecinkowych

Alias Prawdziwy typ Dokładność
FLOAT DOUBLE PRECISION ~15 miejsc (domyślnie)
FLOAT(24) REAL ~6 miejsc
FLOAT(53) DOUBLE PRECISION ~15 miejsc
FLOAT8 DOUBLE PRECISION Przestarzały alias
FLOAT4 REAL Przestarzały alias

Typowe błędy

Pracując z typami liczbowymi, możesz natknąć się na kilka pułapek:

Wybór zbyt małego typu danych. Jeśli do wieku ludzi używasz SMALLINT, to błąd. Robot z "Matriksu", który ma miliony lat, będzie zawiedziony.

Utrata danych przy zaokrąglaniu. Używając REAL w rozliczeniach finansowych, możesz zgubić grosze. A potem i zaufanie klientów.

Porównywanie różnych typów. Jeśli porównasz INTEGER i REAL, możesz dostać nieoczekiwane wyniki przez specyfikę reprezentacji liczb zmiennoprzecinkowych.

2
Zadanie
SQL SELF, poziom 15, lekcja 1
Niedostępne
Zaokrąglanie temperatury
Zaokrąglanie temperatury
2
Zadanie
SQL SELF, poziom 15, lekcja 1
Niedostępne
Konwersja jednostek prędkości (km/h → m/s)
Konwersja jednostek prędkości (km/h → m/s)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION