П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие


Download 1.32 Mb.
Pdf ko'rish
bet38/94
Sana15.06.2023
Hajmi1.32 Mb.
#1487605
1   ...   34   35   36   37   38   39   40   41   ...   94
Bog'liq
Базы данных

3.4.7. Работа с группами 
В чистом виде итоговые функции применяются довольно 
редко. Гораздо чаще они используются для расчета промежуточ-
ных итогов, получаемых применением статистических функций к 
отдельным группам строк таблицы. Группировка строк произ-
водится по принципу равенства значений для этих строк в одном 


60 
или нескольких столбцах, называемых столбцами группировки. 
Типичным примером является запрос 
SELECT stip, COUNT(stip), SUM(stip) FROM stud 
GROUP BY stip . 
Результирующая таблица содержит возможные размеры сти-
пендий, количество студентов, получающих такую стипендию, и 
общую сумму, выделенную на стипендии такого размера. 
В запросе с группировкой перечень выводимых столбцов 
должен содержать все столбцы группировки (и никакие другие), а 
также одну или несколько статистических функций, не обяза-
тельно относящихся к столбцам группировки. Например, запрос 
SELECT grp, SUM(stip) FROM stud GROUP BY grp 
выведет размер стипендиального фонда для каждой студен-
ческой группы. 
Отметим одну особенность обработки пустых значений при 
группировке. Если столбец группировки содержит пустые значе-
ния, то все строки, имеющие пустые значения в этом столбце, 
помещаются в одну группу. 
Часто бывает нужным вывести не все промежуточные итоги, 
а только какую-либо их часть. Для этого применяется фраза 
HAVING <условие>
, где условие – это логическое выражение, состав-
ленное из статистических функций и/или столбцов группировки. 
Вот примеры таких запросов: 
SELECT grp, SUM(stip) FROM stud GROUP BY grp 
HAVING AVG(stip)>1500 ; 
SELECT grp, SUM(stip) FROM stud GROUP BY grp 
HAVING grp LIKE 'МО%' . 
Допускается использование с одном запросе как фразы 
HAVING
, так и фразы 
WHERE
. Так запрос 
SELECT grp, COUNT(stip) FROM stud 
WHERE gor='Ярославль' AND stip>0 
GROUP BY grp 
HAVING grp LIKE 'МО%' 
выведет количество ярославских студентов, получающих 
стипендию, в группах МО. 
В заключение приведем нетривиальный пример использова-
ния операции объединения: получение результирующей таблицы 
с промежуточными итогами: 
SELECT grp, ' '+fam AS fam, stip FROM stud 


61 
UNION 
SELECT grp, 'Всего:' AS fam, SUM(stip) AS stip 
FROM stud 
GROUP BY grp 
ORDER BY grp, fam . 
Этот пример не вполне соответствует стандарту SQL, и, хотя 
он работает в СУБД SQL Server, в других системах это может 
оказаться не так. 

Download 1.32 Mb.

Do'stlaringiz bilan baham:
1   ...   34   35   36   37   38   39   40   41   ...   94




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling