...

Kada u bazi imamo mnogo podataka, često želimo da izračunamo neke zbirne vrednosti — na primer:

  • Koliko ima zapisa u tabeli?
  • Koja je najveća plata?
  • Koja je prosečna ocena učenika?
  • Koliko ima proizvoda sa cenom većom od 100?

Za ovakve zadatke ne koristimo obične SELECT naredbe koje prikazuju sve redove, već agregatne funkcije (eng. aggregate functions).
One ne rade sa pojedinačnim redovima, već sa grupom redova, i vraćaju jednu zbirnu vrednost.


...  pogledajte prezentaciju / pdf - Agregatne funkcije

... LINK - gde možete videti  koje sve funkcije postoje kod SQL Servera (SQL Server Functions), 


ČAS 1 – Osnovne agregatne funkcije

Značenje agregatnih funkcija

Agregatne funkcije se koriste da bi se izračunale vrednosti kao što su:

  • MIN() – najmanja vrednost u koloni

  • MAX() – najveća vrednost u koloni

  • SUM() – zbir vrednosti u koloni

  • AVG() – prosečna vrednost

  • COUNT() – broj redova ili broj nenull vrednosti

Svi ovi izrazi se najčešće koriste sa naredbom SELECT.


Primer - tabela koju koristimo za primere na času
-- 1. Ako već postoji tabela, brišemo je da ne bi došlo do greške
IF OBJECT_ID('Ucenik', 'U') IS NOT NULL
    DROP TABLE Ucenik;
GO

-- 2. Kreiranje tabele UCENIK
CREATE TABLE Ucenik (
  UcenikID INT IDENTITY(1,1) PRIMARY KEY,
  Ime NVARCHAR(30) NOT NULL,
  Prezime NVARCHAR(30) NOT NULL,
  Razred INT NOT NULL,
  ProsecnaOcena DECIMAL(3,2) NULL
);
GO

-- 3. Ubacivanje podataka u tabelu učenik
INSERT INTO Ucenik (Ime, Prezime, Razred, ProsecnaOcena) VALUES
  ('Ana',    'Petrović', 3, 4.50),
  ('Miloš',  'Nikolić',  3, 3.80),
  ('Jelena', 'Pavlović', 3, 4.20),
  ('Nikola', 'Simić',    3, 5.00),
  ('Ivana',  'Marković', 3, NULL);
 
INSERT INTO Ucenik (Ime, Prezime, Razred, ProsecnaOcena) VALUES
  ('Mira',     'Petrov',  3, 4.50),
  ('Milica',   'Nikolić', 3, 3.80),
  ('Jovana',   'Pavlov',  4, 4.20),
  ('Nikolina', 'Simić',   4, 5.00),
  ('Mirko',    'Spahić',  4, NULL);
GO
  
UcenikID Ime Prezime Razred ProsecnaOcena
1 Ana Petrovic 3 4.50
2 Miloš Nikolić 3 3.80
3 Jelena Pavlović 3 4.20
4 Nikola Simić 3 5.00
5 Ivana Marković 3 NULL

Napomena: vrednost NULL znači da podatak nije poznat, npr. učenik još nije dobio sve ocene.


🔹

Pronalazi najmanju vrednost u koloni.

SELECT MIN(ProsecnaOcena) AS NajmanjaOcena
FROM Ucenik;

Rezultat:

NajmanjaOcena
3.80

NULL vrednosti se ignorišu — dakle, one ne utiču na rezultat.

🔹

Pronalazi najveću vrednost u koloni.

SELECT MAX(ProsecnaOcena) AS NajvecaOcena
FROM Ucenik;

Rezultat:

NajvecaOcena
5.00
🔹

Računa zbir svih vrednosti u koloni.

SELECT SUM(ProsecnaOcena) AS ZbirOcena
FROM Ucenik;

Rezultat:

ZbirOcena
17.50

Objašnjenje: 4.5 + 3.8 + 4.2 + 5.0 = 17.5 (NULL se ne računa).

🔹

Računa prosečnu vrednost.

SELECT AVG(ProsecnaOcena) AS Prosek
FROM Ucenik;

Rezultat:

Prosek
4.375

Objašnjenje: Prosek se računa kao 17.5 / 4 jer postoji 4 poznate vrednosti (NULL se ne računa).

🔹

Računa broj redova ili broj nenull vrednosti.
Postoje dve varijante:

  • COUNT(*) – broji sve redove

  • COUNT(kolona) – broji samo nenull vrednosti

SELECT COUNT(*) AS BrojUcenika,
       COUNT(ProsecnaOcena) AS BrojSaOcenom
FROM Ucenik;

Rezultat:

BrojUcenika BrojSaOcenom
5 4

Možemo izračunati više vrednosti u istom upitu:

SELECT 
  MIN(ProsecnaOcena) AS Najmanja,
  MAX(ProsecnaOcena) AS Najveca,
  AVG(ProsecnaOcena) AS Prosek,
  COUNT(*) AS UkupnoUcenika
FROM Ucenik;

Rezultat:

Najmanja Najveca Prosek UkupnoUcenika
3.80 5.00 4.375 5

 VEŽBE ZA PRVI ČAS

  1. Prikazati najveću prosečnu ocenu iz tabele Ucenik.

  2. Izračunati zbir prosečnih ocena svih učenika.

  3. Koliko učenika ima poznatu prosečnu ocenu?

  4. Prikazati najmanju i najveću prosečnu ocenu u istom upitu.

  1. SELECT MAX(ProsecnaOcena) FROM Ucenik;
  2. SELECT SUM(ProsecnaOcena) FROM Ucenik;  
  3. SELECT COUNT(ProsecnaOcena) FROM Ucenik;  
  4. SELECT MIN(ProsecnaOcena) AS Najmanja, MAX(ProsecnaOcena) AS Najveca FROM Ucenik;  

ČAS 2 – Naprednija primena i kombinovanje sa uslovima

1. Agregatne funkcije i uslov WHERE

Agregatne funkcije se često koriste uz uslov da bi se ograničili redovi koji ulaze u računanje.

Primer:
Izračunati prosečnu ocenu samo učenika koji imaju prosečnu ocenu veću od 4.

SELECT AVG(ProsecnaOcena) AS ProsekOdlicnih
FROM Ucenik
WHERE ProsecnaOcena >= 4.5;

Rezultat:

ProsekOdlicnih
4.57

2. COUNT sa uslovom

Koliko učenika ima prosečnu ocenu veću od 4?

SELECT COUNT(*) AS BrojOdlicnih
FROM Ucenik
WHERE ProsecnaOcena >= 4;

Rezultat:

BrojOdlicnih
3

3. GROUP BY – grupisanje rezultata

Agregatne funkcije se često koriste sa GROUP BY, da bi se zbirne vrednosti računale po grupama.
Naša tabela Ucenik ima učenike iz više razreda pa možemo izračunati prosečnu ocenu po razredu:

SELECT Razred, AVG(ProsecnaOcena) AS ProsekPoRazredu
FROM Ucenik
GROUP BY Razred;

Rezultat:

Razred ProsekPoRazredu
3 4.15
4 4.60

4. HAVING – filtriranje nakon grupisanja

Ako želimo da prikažemo samo razrede čiji prosek prelazi 4.3:

SELECT Razred, AVG(ProsecnaOcena) AS ProsekPoRazredu
FROM Ucenik
GROUP BY Razred
HAVING AVG(ProsecnaOcena) > 4.3;

Rezultat:

Razred ProsekPoRazredu
4 4.60

VEŽBE ZA DRUGI ČAS

  1. Izračunati prosečnu ocenu svih učenika osim onih bez ocene.

  2. Prikazati razrede i njihove prosečne ocene.

  3. Prikazati samo one razrede čiji je prosek veći od 4.2.

  4. Izračunati najveću prosečnu ocenu po razredima.

  5. Izračunati broj učenika po razredu.

Rešenja:

  1.   SELECT AVG(ProsecnaOcena)
    FROM Ucenik
    WHERE ProsecnaOcena IS NOT NULL;
  2. SELECT Razred, AVG(ProsecnaOcena) AS Prosek
    FROM Ucenik
    GROUP BY Razred;
     
  3.   SELECT Razred, AVG(ProsecnaOcena) AS Prosek
    FROM Ucenik
    GROUP BY Razred
    HAVING AVG(ProsecnaOcena) > 4.2;
  4.   SELECT Razred, MAX(ProsecnaOcena) AS Najveca
    FROM Ucenik
    GROUP BY Razred;
  5.   SELECT Razred, COUNT(*) AS BrojUcenika
    FROM Ucenik
    GROUP BY Razred;

Važno je zapamtiti:
  • Funkcije ignorišu NULL vrednosti osim COUNT(*).

  • WHERE filtrira pre agregacije, HAVINGposle.

  • GROUP BY grupiše podatke po nekom kriterijumu.


🎯 Kratak test za samoproveru (usmeni ili pismeni)
  1. Koja funkcija se koristi za računanje proseka?

  2. Koja funkcija broji sve redove, uključujući one sa NULL vrednostima?

  3. Koja je razlika između COUNT(*) i COUNT(kolona)?

  4. Šta radi klauzula HAVING?

  5. Da li funkcija AVG uzima u obzir NULL vrednosti?

Last modified: Wednesday, 22 October 2025, 4:31 PM