Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Возможности формулирования аналитических запросов

Читайте также:
  1. Альтернативные возможности производства масла и пушек
  2. Аналитические счетаслужат для детальной характеристики синтетических счетов. Бухгалтерский учет с использованием аналитических счетов называется аналитическим.
  3. Визуальное конструирование запросов
  4. Возможности и ограничения JavaScript
  5. Возможности масштабирования сети
  6. Возможности улучшения способности понимать информацию.
  7. Вопрос 2: Возможности и направления развития сельскохозяйственного страхования
  8. Вопрос 3. Аналитические возможности бухгалтерской отчётности. Оценка надёжности представленной в ней информации
  9. Выполнение международных запросов о производстве следственных действий
  10. Вычислительные возможности Excel
  11. Года: достижения и упущенные возможности.

 

Аналитическими запросами к базе данных принято называть запросы, сводные (агрегатные) результаты которых вычисляются над детальными данными, хранящимися в таблицах базы данных. В этом смысле любой запрос на языке SQL, результат которого основан на вычислении агрегатных функций, можно назвать аналитическим. Характерной особенностью аналитических запросов является то, что, как правило, они применяются к большим по объему базам данных, и выполнение таких запросов вызывает существенные накладные расходам СУБД.

 

В этой курсе мы не будем подробно обсуждать возможности языка SQL, предназначенные для поддержки оперативной аналитической обработки баз данных (OLAP – on-line analytical processing). Рассмотрим только самые базовые средства, опираясь на простые примеры. Для этих примеров предположим, что таблица EMP содержит следующий набор строк (покажем содержимое только тех столбцов, которые потребуются в примерах, причем для простоты будем считать, что в столбце EMP_DATE содержится не полная дата, а только год рождения служащего):

 

EMP

EMP_NO DEPT_NO EMP_BDATE EMP_SAL
15000.00
16000.00
14000.00
19000.00
17000.00
16000.00
14000.00
20000.00
18000.00
13000.00
21000.00
22000.00

 

Представим себе, что для проведения анализа требуется узнать максимальный размер зарплаты во всем предприятии, максимальный размер зарплаты в каждом отделе и максимальный размер зарплаты сотрудников каждой возрастной категории каждого отдела. Если пользоваться стандартными средствами языка SQL, обсуждавшимися ранее в этом курсе, то для получения этих данных потребуется три запроса:

 

SELECT MAX (EMP_SAL) AS MAX_ENT_SAL
FROM EMP;

 

SELECT DEPT_NO, MAX (EMP_SAL) AS MAX_DEP_SAL
FROM EMP
GROUP BY DEPT_NO;

 

SELECT DEPT_NO, EMP_BDATE, MAX (EMP_SAL) AS MAX_DEP_BDATE_SAL
FROM EMP
GROUP BY DEPT_NO, EMP_BDATE;

 

При выполнении запросов будут произведены следующие результирующие таблицы:

 

MAX_ENT_SAL
22000.00

 

DEPT_NO MAX_DEP_SAL
19000.00
20000.00
22000.00

 

DEPT_NO EMP_BDATE MAX_DEP_BDATE_SAL
16000.00
19000.00
17000.00
20000.00
18000.00
22000.00

 

Раздел GROUP BY ROLLUP



 

Эти же результаты можно получить при выполнении единственного запроса, если в его формулировке использовать специальный вид группировки ROLLUP (пример 16.1):

 

SELECT DEPT_NO, EMP_BDATE, MAX (EMP_SAL) AS MAX_SAL
FROM EMP
GROUP BY ROLLUP (DEPT_NO, EMP_BDATE);

 

Сначала покажем, как будет выглядеть результирующая таблица этого запроса, а потом приведем развернутое пояснение действия новой конструкции. В результате выполнения запроса будет получена следующая таблица, показанная на рис. 16.1.

 

DEPT_NO EMP_BDATE MAX_SAL
NULL NULL 22000.00
NULL 19000.00
NULL 20000.00
NULL 22000.00
16000.00
19000.00
17000.00
20000.00
18000.00
22000.00

 

Рис. 16.1. Результат запроса с разделом GROUP BY ROLLUP

 

Как видно, в столбце MAX_SAL первой строки* результирующей таблицы находится максимальное значение зарплаты служащих во всем предприятии. Столбцы DEPT_NO и EMP_BDATE в этой строке содержат неопределенное значение, поскольку значение MAX_SAL не привязано к каким-либо отделу и возрастной категории. В столбце MAX_SAL следующих трех строк находятся максимальные значения зарплаты у сотрудников отделов с номерами 1, 2 и 3 соответственно, что показывают значения столбца DEPT_NO. Столбец EMP_BDATE в этих строках содержит неопределенное значение, поскольку значение MAX_SAL не привязано к какой-либо возрастной категории. Наконец, в столбце MAX_SAL последних шести строк содержатся максимальные значения зарплаты сотрудников каждой возрастной категории каждого отдела, что показывают значения столбцов DEPT_NO и EMP_BDATE, которые теперь содержат соответствующий номер отдела и год рождения служащих.

 

В общем случае, пусть раздел группировки запроса имеет вид GROUP BY ROLLUP (cname1, cname2,…, cnamen), где cnamei (i = 1, 2,…, n) – имя столбца таблицы-результата раздела FROM запроса. Пусть в списке выборки используются вызовы агрегатных функций AGG1, AGG2,…, AGGm над значениями столбцов, не входящих с список группировки, а также имена столбцов cname1, cname2,…, cnamen. Тогда запрос выполняется следующим образом. Первая строка результата (первый набор строк результирующей таблицы) производится таким образом, как если бы в запросе вообще отсутствовал раздел GROUP BY, т.е. агрегатные функции AGG1, AGG2,…, AGGm вычисляются над значениями всех строк таблицы. Значением столбцов cname1, cname2,…, cnamen в этой строке является NULL. (i+1)-й набор строк результата формируется так, как если бы раздел группировки запроса имел вид GROUP BY (cname1, cname2,…, cnamei) (1 £ i < n). Во всех этих строках значением столбцов cname(i+1),…, cnamen является NULL. Наконец, (n+1)-й набор строк результата формируется так, как если бы раздел группировки запроса имел вид GROUP BY (cname1, cname2,…, cnamen).

 

Может показаться, что запросы, содержащие раздел GROUP BY ROLLUP, настолько сложны, что их выполнение будет занимать чрезмерно большое время. Это ощущение является ложным. В действительности, при выполнении запросов с обычной группировкой вида GROUP BY cname1, cname2,…, cnamen, как правило, последовательно выполняется сортировка строк таблицы-результата раздела FROM в соответствии со значениями столбца cname1, затем – в соответствии со значениями столбца cname2 и т.д., и в заключение – сортировка в соответствии со значениями столбца cnamen. Во время выполнения каждой сортировки можно заодно вычислять значения агрегатных функций. Так что стоимость выполнения запроса, содержащего раздел GROUP BY ROLLUP, лишь незначительно отличается от стоимости выполнения запроса с обычной группировкой.

 

<== предыдущая лекция | следующая лекция ==>
Введение. Аналитические запросы к базе данных, оперативная аналитическая обработка баз данных, OLAP, раздел GROUP BY ROLLUP | Агрегатная функция GROUPING

Дата добавления: 2014-01-03; Просмотров: 463; Нарушение авторских прав?;


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Рекомендуемые страницы:

Читайте также:
studopedia.su - Студопедия (2013 - 2019) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление
Генерация страницы за: 0.002 сек.