Садржај
1.0 Базе: Увод у базе података
Шта су базе података?
Табеларна организација података
Повезане табеле
Базе и табеле - квиз
1.1 Базе: SQLite
SQLite и SQLite Studio
Креирање базе у SQLite Studio
SQLite и SQLite Studio - квиз
Креирање базе у SQLite Studio - задаци за вежбу
1.2 Базе: Дизајнирање базе података
База компаније за продају дигиталних композиција - подаци о композицијама
База компаније за продају дигиталних композиција - подаци о продаји
Дизајнирање базе података - квиз
2.0 - SQL: Читање података из базе
SQL: Читање података из табела
Читање података - квиз
2.1 SQL: Пројекција и селекција
Пројекција
Селекција
Пројекција и селекција - квиз
Пројекција и селекција - задаци (дневник)
2.2 SQL: Логички и релацијски оператори
Логички оператори
Релацијски оператори
Оператори - квиз
Оператори - задаци (дневник)
2.3 SQL: Изрази и функције - Додатно
Изрази
Функције
Изрази и функције - квиз
Изрази и функције - задаци (дневник)
2.4 SQL: Сортирање, уклањање дупликата, ограничавање броја врста
Сортирање
Ограничавање броја врста у резултату
Уклањање дупликата
Сортирање, уклањање дупликата, ограничавање одговора - квиз
Сортирање и ограничавање - задаци (дневник)
2.5 SQL: Агрегатне функције и груписање
Агрегатне функције
Груписање и израчунавање статистика појединачних група
Селекција након груписања
Агрегатне функције и груписање - квиз
Агрегатне функције и груписање - задаци (дневник)
2.6 SQL: Спајање табела
Спајање табела
Имплицитно спајање
Спајање и груписање
Врсте спајања
Спајање табела - квиз
Спајање - задаци (дневник)
2.7 SQL: Угнежђени упити
Угнежђени упити
Угнежђени упити - квиз
Угнежђени упити - задаци (дневник)
2.8 SQL: Сложенији угњеждени упити - Додатно
Корелисани подупити
Провера постојања
2.9 SQL: Погледи
Погледи
Погледи - квиз
Погледи - задаци (дневник)
3.0 SQL: Промена садржаја базе
Измене података у бази
3.1 SQL: Уписивање података у табеле
Уписивање података
Уписивање података прочитаних из базе
Уписивање података - квиз
3.2 SQL: Ажурирање података у табелама
Ажурирање података
Ажурирање података - квиз
3.3 SQL: Брисање података из табела
Брисање података
Брисање података - квиз

Агрегатне функције (SUM, AVG, MIN, MAX, COUNT)

У применама је веoма често потребно да се израчунају одређене статистике серија података. То може да буде збир, производ, просек тј. аритметичка средина, најмања или највећа вредност и слично. Приликом израчунавања ових статистика од серије елемената (тј. од свих елемената једне колоне табеле) гради се један резултат, тј. сви подаци се агрегирају у јединствен резултат. Зато се ове функције називају агрегатне функције.

Илуструјмо набројане функције на неколико примера.

Збир елемената

Збир елемената неке колоне може да се добије агрегатном функцијом SUM.

Приказати укупан фонд часова свих предмета.

SELECT SUM(fond)
FROM predmet;

Извршавањем упита добија се следећи резултат:

SUM(fond)

130

Овај упит можемо да прочитамо као:

ОДАБЕРИ збир колоне фонд
ИЗ РЕДОВА табеле предмет

Примећујемо да је назив колоне резултата исти као израз употребљен након речи SELECT, овде SUM(fond). То можемо да променимо навођењем тзв. алијаса након кључне речи AS.

SELECT SUM(fond) AS ukupan_fond
FROM predmet;

Извршавањем упита добија се следећи резултат:

ukupan_fond

130

Агрегатне функције се веома често примењују након филтрирања (селекције само неких врста).

Приказати укупан фонд часова предмета из првог разреда.

SELECT SUM(fond) AS ukupan_fond
FROM predmet
WHERE razred = 1;

Извршавањем упита добија се следећи резултат:

ukupan_fond

33

Овај упит можемо да прочитамо као:

ОДАБЕРИ збир колоне фонд, означен КАО укупан фонд
ИЗ РЕДОВА табеле предмет
КОД КОЈИХ је разред једнак 1

Агрегатне функције се могу применити и на изразе. Илуструјмо то следећим примером.

Под претпоставком да постоји 37 радних недеља, прикажи укупан годишњи фонд часова свих предмета у другом разреду.

SELECT SUM(37 * fond) AS ukupan_godisnji_fond
FROM predmet
WHERE razred = 2;

Извршавањем упита добија се следећи резултат:

ukupan_godisnji_fond

1221

Просек елемената

Просек (аритметичка средина) елемената неке колоне може да се добије агрегатном функцијом AVG.

Приказати просечну оцену из предмета са идентификатором 1.

SELECT AVG(ocena) AS prosecna_ocena
FROM ocena
WHERE id_predmet = 1;

Извршавањем упита добија се следећи резултат:

prosecna_ocena

3.407063197026022

Просечне вредности се обично заокружују на одређен број децимала. Подсетимо се, заокруживање може да се изврши применом функције round. Приметимо да се у том случају гради израз у коме учествује резултат агрегатне функције (на резултат агрегатне функције се могу примењивати уобичајени оператори и функције).

SELECT round(AVG(ocena), 2) AS prosecna_ocena
FROM ocena
WHERE id_predmet = 1;

Извршавањем упита добија се следећи резултат:

prosecna_ocena

3.41

Најмања и највећа вредност

Најмању вредност у некој колони можемо да одредимо функцијом MIN, а највећу функцијом MAX. Ове функције могу да се примене и на бројеве и на ниске и на датуме (при чему је у случају примене на ниске веома битно која колациона секвенца се користи).

Приказати најнижу оцену на писменом задатку из математике у првом разреду одржаном 15. октобра 2020. године (математика у првом разреду има идентификатор 1).

SELECT MIN(ocena) AS najniza_ocena
FROM ocena
WHERE id_predmet = 1 AND datum = '2020-10-15' AND vrsta = 'писмени задатак';

Извршавањем упита добија се следећи резултат:

najniza_ocena

1

Приказати датум када је у дневник уписана последња оцена из српског језика за први разред.

SELECT MAX(datum) AS poslednji_datum
FROM ocena
WHERE id_predmet = 2;

Извршавањем упита добија се следећи резултат:

poslednji_datum

2021-05-10

Прикажи име и презиме ученика у одељењу IV1 који је први у дневнику (ученици се сортирају по азбучном редоследу).

Агрегатне функције могу да се примене и на колоне које се израчунавају као вредности неког израза. У овом случају то је израз којим ће се надовезати ниске које чине презиме и име. Пошто се тражи поређење ниски по азбучном редоследу, а ова изведена колона нема подешену колациону секвенцу, то морамо урадити у оквиру самог упита.

SELECT MIN((prezime || ' ' || ime) COLLATE UNICODE) AS prvi_u_dnevniku
FROM ucenik
WHERE razred = 4 AND odeljenje = 1;

Извршавањем упита добија се следећи резултат:

prvi_u_dnevniku

Васиљевић Дејан

Број елемената

Често желимо да одредимо број елемената неке серије. У случају упита читања података из база то се најчешће своди на то да се изброје врсте у резултату упита. За то се користи агрегатна функција COUNT. Пошто је број врста у резултату једнак броју елемената сваке појединачне колоне, обично се уместо назива колоне, као аргумент ове функције просто наводи звездица *.

Приказати број ученика у табели ученика.

SELECT COUNT(*) AS broj_ucenika
FROM ucenik;

Извршавањем упита добија се следећи резултат:

broj_ucenika

346

Овај упит можемо да прочитамо као:

ОДАБЕРИ број редова резултата, означен КАО број ученика
ИЗ РЕДОВА табеле ученик

Исти резултат би се добио ако би се тражило пребројавање елемената било које конкретне колоне. На пример:

SELECT COUNT(ime) AS broj_ucenika
FROM ucenik;

Извршавањем упита добија се следећи резултат:

broj_ucenika

346

И пребројавање често иде у комбинацији са филтрирањем (селекцијом само неких врста).

Приказати укупан број предмета у првом разреду.

SELECT COUNT(*) AS broj_predmeta
FROM predmet
WHERE razred = 1;

Извршавањем упита добија се следећи резултат:

broj_predmeta

16

Агрегатне функције могу да се комбинују и са елиминисањем дупликата.

Приказати укупан број различитих презимена ученика.

SELECT COUNT(*) AS broj_ucenika, COUNT(DISTINCT prezime) AS broj_prezimena
FROM ucenik;

Извршавањем упита добија се следећи резултат:

broj_ucenika

broj_prezimena

346

114

Вежба

Наредних неколико упита покушај да напишеш самостално. Решења можеш да тестираш овде, а можеш све задатке да урадиш и у систему SQLite Studio.

Одредити датум прве добијене оцене у дневнику и датум последње.



Одредити број јединица које су ученици добили на писменим задацима.



Одредити просечну оцену ученика на контролним вежбама одржаним током новембра 2020. године.



Одредити број предмета из којих је држан писмени задатак (колону назвати broj_predmeta).



Претходна лекција
Следећа лекција
A- A+
Тема
Темa

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.