05.11 - vežbe - 1.grupa (Grupisanje podatka – GROUP BY i HAVING klauzule)
Osnovne pojmove proučiti na sledećem web sajtu (LINK u nastavku):
Grupisanje podatka – GROUP BY i HAVING klauzule
(https://www.doit.rs/grupisanje-podatka-group-by-i-having-klauzule/)
Za potrebe vežbi koristićemo bazu DVD_KOLEKCIJA :
Desni klik i sačuvajte fajl za kreitanje i popunjavanje baze KreirajBazuDvdKolekcija.sql
Otvorite ovaj sql fajl i izvršite upit (Sql Server Management Studio)
Dalje radimo upite nad tabelama u ovoj bazi
use DVD_KOLEKCIJA;
U nastavku su upiti koji su rađeni u učionici, prva grupa:
Ispisati nazive svih filmova (u tabeli Film)
SELECT Naziv
FROM Film;
Ispisati nazive svih filmova koji su kraći od 2 sata
SELECT Naziv
FROM Film
WHERE Trajanje < '02:00:00';
Ispisati nazive svih filmova kojima naziv počinje na slovo 'A'
SELECT Naziv
FROM Film
WHERE Naziv Like 'A%';
Ispisati nazive svih filmova kojima naziv završava na slovo 'a'
SELECT Naziv
FROM Film
WHERE Naziv Like '%a';
Koliko je redova u tabeli Film? ili, koliko je filmova u tabeli ?
select COUNT (*)
from Film;
Koliko je najveće (MAX) trajanje od svih filmova u tabeli?
select MAX(Trajanje)
from Film
A kako biste u to dodali i da se ispiše naziv filma kojem je trajanje najduže?
select Naziv, Trajanje from Film
where Trajanje = (select MAX(Trajanje)from Film)
Da ponovimo, kako da se ispiše sve što imamo u tabeli
select * from Film;
Za sve zapise u tabeli ispisati njihov ZanrID
select ZanrID from Film;
Koliko je filmova u tabeli za svaki od žanrova (za svaki ZanrID)
select ZanrID, COUNT(FilmID)
FROM Film
Group by ZanrID;
Ako uzmemo još jednu tabelu u bazi, na primer Glumac, onda je sve što imamo u tabeli:
select * from Glumac;
Ukupan broj redova u tabeli Glumac
select COUNT(*) from Glumac;
S obzirom da imamo više podataka u tabeli Film, nastavljamo dalje sa upitima nad tom tabelom .....
Grupisati po žanrovima i samo za filmove koji su duži od 2 sata ispisati koji je ZanrID i koliko ih ima
select ZanrID, COUNT(FilmID)
FROM Film
where Trajanje > '02:00:00'
Group by ZanrID;
Napomena:
Vodite računa da WHERE ide pre GROUP BY .....
a ako treba da se dodatno bira od rezultata koji se dobiju grupisanjem, tada se posle GROUP BY dodaje HAVING.
Za svaki od žanrova treba naći maksimalno trajanje filma
select ZanrID, MAX(trajanje)
from Film
group by ZanrID
ako dodatno želimo da se prikažu samo za one žanrove za koje je maksimalno trajanje filma duže od 3 sata:
select ZanrID, MAX(trajanje)
from Film
group by ZanrID
HAVING MAX(trajanje) > '3:00:00';
Ispis datuma i vremena nije uvek takav da nam se sviđa. Zbog toga je dobra praksa ako se kontroliše način na koji je prikazano trajanje filmova. Do sada smo koristili CAST i CONVERT.
Za svaki od žanrova treba naći maksimalno trajanje filma, s tim da se koristi CAST za lepši prikaz datuma
select ZanrID, CAST(MAX(trajanje) AS varchar(10))
from Film
group by ZanrID
Za svaki od žanrova treba naći maksimalno trajanje filma, s tim da se koristi CONVERT za lepši prikaz datuma
select ZanrID, CONVERT(varchar(10), MAX(Trajanje),108) AS NajduzeTrajanje
from Film
group by zanrid
Od rezultata koji se dobiju uzeti samo one kod kojih je maksimalno trajanje filma duže od 3 sata
select ZanrID, MAX(trajanje), CONVERT(VARCHAR(10), MAX(Trajanje),108) AS NajduzeTrajanje
from Film
group by ZanrID
HAVING MAX(trajanje) > '3:00:00';
Prikazati koliko je najmanje trajanje od svih folmova u tabeli
select MIN(Trajanje)
from Film
Grupisati po žanrovima i ispisati koliko je najkraće trajanej filmova za svaki od žanrova (ZanrID)
select ZanrID, min(trajanje)
from Film
group by zanrid
Prilagoditi prikez trajanja filma pomoću funkcije CONVERT
select ZanrID, CONVERT(varchar(10), min(Trajanje),108) AS NajmanjeTrajanje
from Film
group by zanrid
Od rezultata koji se dobiju uzeti samo one kod kojih je minimalno trajanje filma duže od jednog sata
select ZanrID, min(trajanje) , CONVERT(varchar(10), min(Trajanje),108) AS NajmanjeTrajanje
from Film
group by zanrid
having min(trajanje) >'01:00:00'