Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

Słowa kluczowe: AVG() w SQL BETWEEN w SQL COUNT() w SQL DQL w SQL Funkcje agregujące w SQL WHERE w SQL

W tabeli personel znajdują się pola: imie, nazwisko, pensja, staz. Aby obliczyć łączną kwotę pensji osób zatrudnionych ze stażem od 10 do 20 lat włącznie, należy zastosować kwerendę

A.
SELECT SUM(*) FROM personel WHERE staz >= 10 AND staz <= 20;
B.
SELECT MAX(pensja) FROM personel WHERE staz >= 10 AND staz <= 20;
C.
SELECT SUM(pensja) FROM personel WHERE staz >= 10 AND staz <= 20;
D.
SELECT COUNT(pensja) FROM personel WHERE staz >= 10 AND staz <= 20;
W tej kwerendzie kluczowe jest użycie funkcji agregującej SUM(pensja), bo pytanie dotyczy łącznej kwoty pensji, czyli sumy wartości z kolumny pensja. Warunek WHERE staz >= 10 AND staz <= 20 ogranicza rekordy tylko do pracowników, których staż mieści się w przedziale od 10 do 20 lat włącznie. To „włącznie” jest tu ważne: osoby ze stażem dokładnie 10 lat oraz dokładnie 20 lat również zostaną uwzględnione. Zapytanie SELECT SUM(pensja) FROM personel WHERE staz >= 10 AND staz <= 20; jest zgodne z typowym użyciem SQL w raportach kadrowo-płacowych, np. gdy firma chce policzyć koszt wynagrodzeń dla konkretnej grupy pracowników. Moim zdaniem warto też znać zapis alternatywny: WHERE staz BETWEEN 10 AND 20, ponieważ BETWEEN w SQL również obejmuje granice przedziału. W praktyce dobrze jest czasem nadać alias wynikowi, np. SELECT SUM(pensja) AS laczna_pensja, żeby kolumna w wyniku miała czytelną nazwę. Trzeba też pamiętać, że SUM pomija wartości NULL, co w bazach danych jest normalnym zachowaniem funkcji agregujących.
W tym zadaniu łatwo pomylić różne funkcje agregujące SQL, bo wszystkie wyglądają podobnie składniowo, ale robią zupełnie inne rzeczy. COUNT(pensja) nie oblicza kwoty pieniędzy, tylko liczy, ile rekordów ma niepustą wartość w kolumnie pensja. Gdyby pięć osób spełniało warunek stażu, wynik byłby 5, a nie suma ich wynagrodzeń. To typowy błąd wynikający z myślenia, że skoro wskazujemy kolumnę pensja, to baza „coś z nią policzy finansowo”. SQL działa jednak bardzo dosłownie. MAX(pensja) też nie daje sumy, tylko największą pojedynczą pensję wśród osób ze stażem od 10 do 20 lat. Taka kwerenda przydałaby się do znalezienia najlepiej opłacanego pracownika w tej grupie, ale nie do obliczenia łącznego kosztu wynagrodzeń. Z kolei SUM(*) jest koncepcyjnie nietrafione, a w wielu systemach bazodanowych po prostu niepoprawne składniowo, bo SUM oczekuje wyrażenia liczbowego, najczęściej konkretnej kolumny, np. pensja. Gwiazdka ma sens głównie w SELECT * albo COUNT(*), gdzie oznacza wszystkie wiersze, a nie wartość do dodawania. Dobra praktyka jest taka: najpierw ustalamy, czy chcemy liczyć rekordy, szukać maksimum, czy sumować wartości, a dopiero potem dobieramy COUNT, MAX albo SUM. Tutaj potrzebna jest suma wynagrodzeń, więc właściwa funkcja to SUM(pensja), połączona z filtrem WHERE na kolumnie staz.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.