0Pricing
SQL Academy · Lekcja

Dzielenie całkowite a dziesiętne

Unikaj zaskakujących wyników dzięki rzutowaniu typów

Dzielenie całkowite a dziesiętne to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Zaskakujący wynik

Zacznijmy od zagadki. Jak Państwo sądzą, co zwraca poniższe zapytanie?

Jeśli spodziewają się Państwo wyniku 0.5, mogą się Państwo zdziwić. W wielu bazach danych SQL dzielenie dwóch liczb całkowitych daje wynik całkowity — część dziesiętna jest całkowicie odrzucana.

SELECT 1 / 2 AS result;

Wyjaśnienie dzielenia całkowitego

Gdy oba operandy dzielenia są liczbami całkowitymi, SQL wykonuje dzielenie całkowite. Wynik jest obcinany w kierunku zera — bez zaokrąglania, pozostaje tylko część całkowita.

Zatem 1 / 2 = 0, 7 / 3 = 2, a 9 / 4 = 2. Część ułamkowa jest po cichu odrzucana.

SELECT 7 / 3 AS truncated_result;

Więcej przykładów dzielenia całkowitego

Oto kilka przykładów dzielenia całkowitego w jednym zapytaniu. Warto zauważyć, że wszystkie wyniki tracą część dziesiętną. To zachowanie jest spójne we wszystkich wyrażeniach zawierających wyłącznie literały całkowite lub kolumny całkowitoliczbowe.

SELECT
  10 / 4  AS ten_div_four,
  9  / 2  AS nine_div_two,
  1  / 3  AS one_div_three,
  6  / 6  AS six_div_six;

Rozwiązanie za pomocą CAST

Najpewniejszym sposobem wymuszenia dzielenia dziesiętnego jest rzutowanie co najmniej jednego operandu na typ dziesiętny. CAST(value AS DECIMAL) lub CAST(value AS NUMERIC) informuje SQL, aby traktował tę liczbę jako wartość zmiennoprzecinkową, dzięki czemu dzielenie zwróci precyzyjny wynik.

SELECT CAST(1 AS DECIMAL) / 2 AS result;

CAST po obu stronach

Do uzyskania wyniku dziesiętnego wystarczy rzutować jedną stronę dzielenia — SQL automatycznie dostosuje typ drugiego operandu. Rzutowanie obu stron sprawia jednak, że intencja jest jednoznaczna i ułatwia późniejsze czytanie kodu.

SELECT
  CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
  CAST(7 AS DECIMAL) / 3                   AS one_cast;

Używanie literału dziesiętnego

Innym szybkim sposobem jest zapisanie jednego operandu jako literału dziesiętnego przez dodanie .0. SQL rozpoznaje 1.0 jako liczbę dziesiętną, co wymusza arytmetykę dziesiętną w całym wyrażeniu.

Jest to wygodne w szybkich zapytaniach ad hoc, ale w kodzie produkcyjnym zapis CAST jest czytelniejszy.

SELECT 1.0 / 2  AS decimal_result,
       7.0 / 3  AS another_result;

Pułapka z życia: dane w kolumnach

Problem staje się naprawdę dotkliwy podczas pracy z kolumnami całkowitoliczbowymi. Wyobraźmy sobie tabelę śledzącą cele sprzedażowe. Dzielenie kolumn całkowitoliczbowych daje wyniki całkowite — współczynnik konwersji wyniesie 0, choć powinien wynosić 0.75!

CREATE TABLE sales_targets (
  rep         TEXT,
  achieved    INT,
  target      INT
);

INSERT INTO sales_targets VALUES
  ('Alice', 75, 100),
  ('Bob',   3,  4),
  ('Carol', 9,  10);

SELECT rep,
       achieved / target AS wrong_rate
FROM   sales_targets;

Naprawianie dzielenia kolumn

Zastosuj CAST do kolumny licznika, a dzielenie zwróci teraz rzeczywisty współczynnik konwersji w postaci liczby dziesiętnej. Mianownik zostanie automatycznie przekonwertowany.

Późniejsze pomnożenie przez 100.0 da wynik procentowy — przez cały czas używana jest arytmetyka dziesiętna.

SELECT rep,
       CAST(achieved AS DECIMAL) / target          AS conversion_rate,
       CAST(achieved AS DECIMAL) / target * 100.0  AS pct
FROM   sales_targets;

Kontrolowanie precyzji liczb dziesiętnych

Można kontrolować liczbę przechowywanych miejsc dziesiętnych, określając precyzję i skalę w rzutowaniu: DECIMAL(10, 2) oznacza maksymalnie 10 cyfr łącznie, z czego 2 znajdują się po przecinku dziesiętnym. Jest to przydatne, gdy potrzebny jest przejrzysty, zaokrąglony wynik zamiast wielu końcowych cyfr.

SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;

ROUND po dzieleniu

Czasami potrzebne jest wykonywanie obliczeń z pełną precyzją, a następnie zaokrąglenie końcowej wyświetlanej wartości. Funkcja ROUND przyjmuje wartość oraz liczbę miejsc dziesiętnych, które należy zachować.

Najpierw należy zawsze wykonać dzielenie (z użyciem arytmetyki dziesiętnej), a dopiero potem zaokrąglać — nigdy nie należy zaokrąglać przed dzieleniem.

SELECT
  ROUND(CAST(1 AS DECIMAL) / 3, 4)  AS four_places,
  ROUND(CAST(1 AS DECIMAL) / 3, 2)  AS two_places,
  ROUND(CAST(1 AS DECIMAL) / 3, 0)  AS zero_places;

Dzielenie całkowite może być przydatne

Dzielenie całkowite nie zawsze jest błędem — czasami jest dokładnie tym, czego potrzeba. Na przykład przeliczanie łącznej liczby minut na pełne godziny celowo wykorzystuje dzielenie całkowite. Najważniejsze jest świadome wybranie dzielenia całkowitego lub dziesiętnego, zamiast przypadkowego uzyskania jednego z tych rodzajów.

SELECT
  137 / 60  AS full_hours,
  137 % 60  AS remaining_minutes;

Szybki test

Sprawdź swoją wiedzę na temat dzielenia całkowitego i dziesiętnego w SQL.

Podsumowanie lekcji

W tej lekcji poznano sposób, w jaki SQL obsługuje dzielenie liczb całkowitych:

  • Integer / Integer obcina wynik — część dziesiętna jest tracona bez ostrzeżenia.
  • Użyj CAST(value AS DECIMAL) dla co najmniej jednego operandu, aby wymusić dzielenie dziesiętne.
  • Zapisanie literału dziesiętnego, takiego jak 1.0, również promuje wyrażenie do arytmetyki dziesiętnej.
  • Użyj ROUND po dzieleniu, aby kontrolować liczbę wyświetlanych miejsc dziesiętnych.
  • Dzielenie całkowite bywa zamierzone (np. przy przeliczaniu minut na godziny), ale zawsze należy wybierać je świadomie, a nie uzyskiwać przypadkowo.

Należy uważać na tę pułapkę za każdym razem, gdy dzielone są kolumny całkowite — jest to jedno z najczęstszych źródeł cichych, trudnych do wykrycia błędów w zapytaniach SQL.

Często zadawane pytania

Czy lekcja „Dzielenie całkowite a dziesiętne” jest bezpłatna?

Tak — pełny tekst „Dzielenie całkowite a dziesiętne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Dzielenie całkowite a dziesiętne”?

Unikaj zaskakujących wyników dzięki rzutowaniu typów Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Dzielenie całkowite a dziesiętne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Działania arytmetyczne i operatory
  2. Zaokrąglanie i obcinanie
  3. Dzielenie całkowite a dziesiętne
  4. Przydatne funkcje matematyczne
← Powrót do SQL Academy