CodeGym /Kursy /SQL SELF /Funkcje liczbowe w SQL: zaokrąglanie, reszta, potęga i pi...

Funkcje liczbowe w SQL: zaokrąglanie, reszta, potęga i pierwiastek

SQL SELF
Poziom 8 , Lekcja 3
Dostępny

SQL to nie tylko tekst i tabele. W prawdziwych bazach danych często musisz ogarniać ceny, ilości, punkty, procenty, współrzędne, czyli po prostu liczby. Wyobraź sobie:

  • Licząc zniżki chcesz zaokrąglić sumę do całości.
  • Chcesz wyświetlić dane o parzystych/nieparzystych studentach.
  • Robisz analizę ocen i chcesz znać pierwiastek kwadratowy z wariancji.
  • Albo budujesz wzory na punkty z potęgowaniem.

SQL ogarnia to wszystko bez pomocy zewnętrznych języków programowania — wszystko można zrobić bezpośrednio w zapytaniach dzięki wbudowanym funkcjom matematycznym. Dzisiaj ogarniemy sześć najbardziej przydatnych:

  • ROUND() — zaokrąglanie
  • CEIL() — zaokrąglanie w górę
  • FLOOR() — zaokrąglanie w dół
  • MOD() — reszta z dzielenia
  • POWER() — potęgowanie
  • SQRT() — pierwiastek kwadratowy

* Zaokrąglanie liczb: ROUND(), CEIL(), FLOOR()*

Często przy pracy z liczbami zmiennoprzecinkowymi (np. 4.67891) trzeba zaokrąglić wynik. Na przykład, gdy liczysz średnią ocenę, końcową wartość zamówienia, procent zniżki itd. — zbędne cyfry po przecinku nie tylko "psują" wygląd, ale mogą też wprowadzać w błąd.

ROUND() — zaokrąglanie według zasad matematyki

ROUND(number [, digits])
  • number — liczba, którą zaokrąglasz.
  • digits (opcjonalny) — ile miejsc po przecinku zostawić.

Przykłady:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND() działa tak samo jak klasyczne zaokrąglanie w matematyce: 4.5 → 5, 4.49 → 4.

Bardzo przydatne, jeśli pracujesz z kasą albo punktami, które mają wyglądać ładnie: 4.333334.33.

CEIL() — zaokrąglanie w górę do najbliższej całości

SELECT CEIL(4.1);  -- 5
  • Jeśli liczba już jest całkowita, wynik się nie zmienia.
  • Zawsze zwraca liczbę całkowitą, nie mniejszą niż oryginał.

Przydatne np. gdy musisz określić liczbę stron do wyświetlenia produktów: 21 produktów przy 10 na stronę → potrzebujesz 3 strony.

FLOOR() — zaokrąglanie w dół

SELECT FLOOR(4.9);  -- 4
  • Zwraca liczbę całkowitą, nie większą niż oryginał.

Używane, gdy musisz określić "piętro" albo "stopień", na którym jest wartość.

Porównanie:

Wartość ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* Reszta z dzielenia: MOD()*

Po co reszta? Na przykład:

  • Sprawdzić, czy liczba jest parzysta.
  • Podzielić wiersze na grupy według wzoru (np. rozdział na 3 drużyny).
  • Zrobić powtarzający się cykl (np. "co piąty rekord").

Składnia:

MOD(dividend, divisor)

Przykłady:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

Pamiętaj: znak reszty zależy od znaku pierwszego argumentu (dividend).

Zastosowanie:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN 'Parzysty' ELSE 'Nieparzysty' END AS parity
FROM students;

* Potęgowanie: POWER()*

Czasem trzeba nie tylko mnożyć, ale użyć wzorów matematycznych:

  • Obliczanie procentów: base * POWER(1 + rate, years)
  • Pole koła: π * r^2
  • Wagi wzorów w machine learning

Składnia:

POWER(base, exponent)

Przykłady:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (pierwiastek kwadratowy)

Funkcja przyjmuje dowolne liczby: całkowite, zmiennoprzecinkowe, ujemne.

Pierwiastek kwadratowy: SQRT()

Jeśli musisz policzyć pierwiastek, szczególnie w statystyce (np. odchylenie standardowe), SQRT() się przyda.

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

Jeśli podasz liczbę ujemną — będzie błąd. Jeśli to możliwe w twoich danych, użyj ABS():

SELECT SQRT(ABS(-25));  -- 5

Praktyczne scenariusze

Scenariusz 1: zaokrąglanie końcowej sumy zamówienia

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

Scenariusz 2: obliczanie liczby stron do wyświetlenia

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

Scenariusz 3: podział studentów na 3 grupy

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

Scenariusz 4: pierwiastek ze średniej kwadratowej

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

Typowe błędy i porady

ROUND() może przyjmować drugi argument — nie zapomnij o nim, jeśli chcesz zaokrąglić do setnych.

MOD() z liczbami ujemnymi może zwracać nieoczekiwane wyniki.

POWER() i SQRT() działają z argumentami zmiennoprzecinkowymi — użyj CAST() jeśli trzeba.

Upewnij się, że do SQRT() nie trafi liczba ujemna, bo będzie błąd wykonania.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION