Kolumny obliczane i pierwszeństwo operatorów
Arytmetyka, konkatenacja i pierwszeństwo operatorów na listach SELECT
Kolumny obliczane i pierwszeństwo operatorów to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 2 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 Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.
Kolumny obliczane w SELECT
Kolumna obliczana to wyrażenie w SELECT, które wyprowadza wartość zamiast odczytywać ją bezpośrednio — na przykład price * quantity. Zawsze należy nadać jej czytelny alias.
SELECT product,
price,
quantity,
price * quantity AS line_total
FROM order_items;Operatory arytmetyczne
SQL ma typowe operatory matematyczne: +, -, *, / oraz operator modulo. Typ wyniku zależy od operandów — i właśnie tutaj kryje się kolejna pułapka.
SELECT 7 + 3 AS sum_val,
7 - 3 AS diff_val,
7 * 3 AS prod_val,
7 % 3 AS remainder;Pułapka dzielenia całkowitoliczbowego
Uwaga: dzielenie dwóch liczb całkowitych wykonuje dzielenie całkowitoliczbowe, więc 5 / 2 daje wynik 2, a nie 2.5. Można temu zapobiec, rzutując jedną stronę na typ dziesiętny albo mnożąc ją przez 1.0.
SELECT 5 / 2 AS int_div, -- 2
5 * 1.0 / 2 AS real_div, -- 2.5
CAST(5 AS DECIMAL) / 2 AS cast_div; -- 2.5Priorytet operatorów
SQL stosuje standardowy matematyczny priorytet: * i / są wykonywane przed + i -. Dlatego 2 + 3 * 4 daje 14, a nie 20. Nawiasy zmieniają tę kolejność.
SELECT 2 + 3 * 4 AS no_parens, -- 14
(2 + 3) * 4 AS with_parens; -- 20Priorytet operatorów w rzeczywistym zapytaniu o rabat
Błędy związane z priorytetem często pojawiają się w logice biznesowej. W przypadku ceny po rabacie price - price * rate jest poprawne, ponieważ * jest wykonywane najpierw. Zawsze należy sprawdzić, czy grupowanie faktycznie używane przez silnik jest zgodne z założeniami.
SELECT price,
discount_rate,
price - price * discount_rate / 100 AS net_price
FROM products;Konkatenacja ciągów znaków
Łączenie tekstu zależy od bazy danych: || w Postgresie i standardowym SQL, + w SQL Serverze oraz CONCAT() w MySQL. CONCAT() to bezpieczny i przenośny wybór.
-- Postgres / standard
SELECT first_name || ' ' || last_name AS full_name
FROM employees;
-- Portable
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;NULL psuje działania arytmetyczne
To ważna zasada: dowolne działanie matematyczne z NULL daje NULL. Dlatego base_salary + bonus ma wartość NULL dla każdej osoby, dla której brakuje premii. Należy opakować ryzykowne kolumny w COALESCE, aby dostarczyć wartość domyślną.
SELECT base_salary,
bonus,
base_salary + bonus AS unsafe_total,
base_salary + COALESCE(bonus,0) AS safe_total
FROM employees;Konkatenacja i NULL w zależności od dialektu
NULL dotyczy również tekstu, a poszczególne dialekty zachowują się różnie: Postgres sprawia, że cały ciąg znika, natomiast CONCAT w SQL Serverze traktuje NULL jak pusty tekst. Należy opakować każdy element w COALESCE, aby uzyskać przewidywalny wynik.
SELECT COALESCE(first_name,'') || ' ' || COALESCE(last_name,'') AS full_name
FROM employees;Funkcje wewnątrz wyrażeń
Kolumny obliczane mogą bez problemu zawierać funkcje takie jak ROUND, ABS czy UPPER. Wywołanie funkcji jest po prostu kolejnym wyrażeniem, dlatego można bezpośrednio zagnieżdżać je w działaniach matematycznych.
SELECT product,
ROUND(price * quantity * 1.0, 2) AS line_total,
UPPER(product) AS product_caps
FROM order_items;Wymuszanie typów i CAST
Gdy typy operandów się różnią, SQL wykonuje niejawne konwertowanie typów, które może prowadzić do niespodzianek. Należy jawnie używać CAST(expr AS type) — osoby prowadzące rozmowy techniczne odczytują to jako staranny i defensywny kod.
SELECT 'Order #' || CAST(order_id AS VARCHAR) AS label
FROM orders;Wyrażenia logiczne jako kolumny
Porównanie takie jak price > 100 samo jest wyrażeniem. Postgres może zwrócić je w SELECT jako true/false, ale przenośne rozwiązanie opakowuje je w CASE, aby zwrócić 1/0 albo etykietę.
-- Portable
SELECT product,
CASE WHEN price > 100 THEN 1 ELSE 0 END AS is_pricey
FROM products;Szybkie sprawdzenie
Oblicz wyrażenie.
Podsumowanie
Podsumowanie: należy nadawać aliasy kolumnom obliczanym. W przypadku dzielenia dziesiętnego należy stosować rzutowanie, pamiętać o priorytecie operatorów, używać CONCAT() do przenośnego łączenia tekstu — i pamiętać, że NULL psuje działania matematyczne, dlatego należy zabezpieczać je za pomocą COALESCE.
Często zadawane pytania
Czy lekcja „Kolumny obliczane i pierwszeństwo operatorów” jest bezpłatna?
Tak — pełny tekst „Kolumny obliczane i pierwszeństwo operatorów” 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 Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Kolumny obliczane i pierwszeństwo operatorów”?
Arytmetyka, konkatenacja i pierwszeństwo operatorów na listach SELECT Ćwiczysz Coding Interview Prep 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ąć Coding Interview Prep?
Nie wymagamy żadnego doświadczenia. Coding Interview Prep 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 2 z 4.
Ile czasu zajmuje lekcja „Kolumny obliczane i pierwszeństwo operatorów”?
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 Coding Interview Prep?
Tak. Każda lekcja Coding Interview Prep 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
- Projekcja kolumn i pułapki aliasów
- Kolumny obliczane i pierwszeństwo operatorów
- DISTINCT a GROUP BY w uzyskiwaniu unikatowości
- Wyrażenia CASE w SELECT