Изчисления с функциите COUNT, SUM, AVG, MIN, MAX в SQL | Център за професионално обучение - Devise Expert

Изчисления с функциите COUNT, SUM, AVG, MIN, MAX в SQL

SQL MIN MAX Count
Към курса Анализ на данни и изготвяне на отчети с SQL

Автор: Дикран Хачикян

Функциите COUNT(), SUM(), AVG(), MIN(), MAX() в езика SQL са в групата на агрегиращите функции и присъстват в множество заявки и отчети с изчисления.

COUNT()

брои

AVG()

изчислява средно аритметично

SUM()

сумира

MIN()

намира минимум

MAX()

намира максимум

В зависимост от сървъра, който използваме в тази група  може да има и други функции (проверете в документацията),  но изброените в таблицата са основните функции и ги има във всички сървъри за бази данни.

Важна особеност за правилната работа на тези функции е групирането на данните в резултата.

Групиране на данните

При групиране на данните, сървъра сравнява стойностите по редовете и ако открие два или повече реда със съвпадащи стойности в съответните колони, сървъра ги представя като един ред.

За да се посочи на сървъра, че трябва да групира данните, след  FROM  клаузата или след WHERE клаузата,  ако има такава, трябва да се постави GROUP BY.

След GROUP BY като минимум се изброяват онези колони, които са изброени и в частта SELECT без в това число да се включват агрегиращите функции.

Да разгледаме как сървъра групира данните с помощта на следващите три примера.

Пример 1:

Имаме следната данни:


и зявка:

В колона col3 всички стойности са уникални по редовете. По тази причина, сървърът няма да може да групира данните, тъй като няма два или повече реда с повтарящи се стойности по съответните колони. От това следва, че няма смисъл да се използва която и да е функция от групата на агрегиращите.

Пример 2:

Ако изключим третата колона ще имаме следните данни:

и заявка:

В този случай, първита два реда и последните два реда имат съвпадащи стойности по редовете, от което следва, че сървъра ще ги представи в две групи по два реда. Съответно, функцията COUNT(*) ще върне стойността 2 за всяка от групите.

Пример 3:

Ако изключим и втората колона,

и имаме заявка:

В резултата ще получим само един ред, съдържащ стойността а и функцията COUNT(*) ще върне стойността 4, тъй като са групирани 4 реда.

Важно е да запомните, че в зависимост от това кои колони включвате или изключвате от заявката, не само резултатите от агрегиращите функции ще са различни, но и смисълът на заявката се променя коренно. По тази причина, първата и най-важна стъпка при използването на която и да е агрегираща функция е да намерим правилен отговор на въпроса „Как трябва да се групират данните за да се получи желаният резултат?“.

Можете да видите практически примери в използването на агрегиращите функции и вземането на решение за групиране на данните в това видео:

Във видеото е използвана базата данни HR, която се инсталира заедно със сървъра Oracle XE. Можете да свалите безплатна версия от тук.

Заявките използвани във видеото:

 

Искате да научите повече за заявките в SQL? Вижте още за предстоящия курс Анализ на данни и изготвяне на отчети с SQL

Към курса Анализ на данни и изготвяне на отчети с SQL