Strona główna › Pytania INF.03 › Pytanie 996
INF.03 · pytanie #996
<table><thead><tr><th scope="col">ID_Pracownika</th><th scope="col">Nazwisko</th><th scope="col">Imię</th><th scope="col">Stanowisko</th><th scope="col">Wynagrodzenie</th></tr></thead><tbody><tr>17<thead>18<td>Kowalski</td><td>Krzysztof</td><td>kasjer</td><td>3215,76</td></tr><tr>29<tr>30<td>Nowak</td><td>Antoni</td><td>kierownik</td><td>5350,00</td></tr><tr>41<th scope="col">42<td>Zając</td><td>Alicja</td><td>księgowy</td><td>4568,70</td></tr><tr>53</th>54<td>Król</td><td>Witold</td><td>kasjer</td><td>3045,00</td></tr><tr>65<th scope="col">66<td>Nowik</td><td>Grzegorz</td><td>kasjer</td><td>2750,65</td></tr><tr>77</th>78<td>Kotulski</td><td>Andrzej</td><td>kierowca</td><td>3467,00</td></tr><tr>89<th scope="col">90<td>Tutka</td><td>Katarzyna</td><td>kierownik</td><td>4935,33</td></tr><tr>101</th>102<td>Porada</td><td>Jakub</td><td>magazynier</td><td>3321,56</td></tr></tbody></table> Które zapytanie SQL należy wykonać na tabeli <em>Pracownicy</em>, aby otrzymać średnie wynagrodzenie dla pracownika na stanowisku kasjer?
- ASELECT AVG(Wynagrodzenie) FROM Pracownicy WHERE Stanowisko='kasjer';
- BSELECT SUM(*) FROM Pracownicy AND Stanowisko= 'kasjer';
- CSELECT SREDNIA(Wynagrodzenie) AND Stanowisko='kasjer' FROM Pracownicy;
- DSELECT AVG(kasjer.Wynagrodzenie) FROM Pracownicy;
Poprawna odpowiedź: A. SELECT AVG(Wynagrodzenie) FROM Pracownicy WHERE Stanowisko='kasjer';
Kliknij odpowiedź, którą uważasz za poprawną.
Wyjaśnienie
Poprawne zapytanie to SELECT AVG(Wynagrodzenie) FROM Pracownicy WHERE Stanowisko='kasjer';, bo dokładnie robi to, o co chodzi w treści zadania. Funkcja AVG() w SQL jest standardową funkcją agregującą, która liczy średnią arytmetyczną z wartości liczbowych w danej kolumnie. W tym przypadku kolumna to Wynagrodzenie, czyli kwoty wypłat, a klauzula WHERE Stanowisko='kasjer' zawęża zestaw rekordów tylko do pracowników na stanowisku kasjera. Najpierw więc silnik bazy danych filtruje wiersze (kasjerów), a dopiero potem na tej ograniczonej grupie liczy średnią. To jest bardzo typowy i poprawny schemat pracy z danymi w SQL: najpierw filtrujesz, potem agregujesz. Moim zdaniem warto zauważyć, że taka konstrukcja jest uniwersalna – w praktyce w firmach często liczy się średnie wynagrodzenia dla różnych stanowisk, działów, lokalizacji. Wtedy zmienia się tylko warunek w klauzuli WHERE. Można też pójść krok dalej i użyć GROUP BY, np. SELECT Stanowisko, AVG(Wynagrodzenie) FROM Pracownicy GROUP BY Stanowisko; żeby dostać średnie dla wszystkich stanowisk naraz, co jest wygodne np. w raportach HR. To, co masz w odpowiedzi, to w zasadzie „wersja jednostanowiskowa” takiego raportu. Ważna dobra praktyka: zawsze filtrujemy w klauzuli WHERE, a nie próbujemy wpychać warunków do funkcji agregującej. Dzięki temu zapytanie jest czytelne, zgodne ze standardem SQL i dobrze optymalizowane przez silnik bazy. W realnych projektach staramy się też nadać alias wynikom agregacji, np. SELECT AVG(Wynagrodzenie) AS SredniaKasjera FROM Pracownicy WHERE Stanowisko='kasjer';, żeby w raportach i w kodzie aplikacji od razu było wiadomo, co oznacza zwracana kolumna.
🤖 Wyjaśnienie generowane przez AI – weryfikuj w oficjalnych źródłach.