Навигация:  МОДУЛЬ "СИСТЕМНОЕ ЯДРО" > ПОДМОДУЛЬ "СТАТИСТИКА" > Простые запросы > Визуальный конструктор запросов > Запрашиваемые данные >

Группировка и агрегатные функции

Предыдущая страницаВернуться в начало главыСледующая страница

Группировка соответствует секции GROUP BY SQL-запроса. Она позволяет переложить на SQL-сервер всю работу по обработке информации, передавая на клиентский компьютер только результат. Эта возможность необходима при обработке больших объемов информации (десятков и сотен тысяч записей).

В списке полей указываются те поля и выражения, по которым осуществляется группировка. Они помечаются значком «G».

После того, как отобраны поля и выражения, по которым осуществляется группировка, необходимо создать выражения, содержащие агрегатные функции

·сумма SUM( … )

·минимальное значение MIN( … )

·максимальное значение MAX( … )

·отклонение (STDEV)

·отклонение выборки (STDEVP)

·вариация (VAR)

·вариация выборки (VARP)

и др.

Примечание: поля, у которых признак группировки не включен, не попадают в запрос. Они могут использоваться только в качестве фильтров.

Пример

В качестве примера рассмотрим запрос Талоны с разбивкой по типу (рис. 2.3.6). В этом запросе нужно получить количество ОМС- и ДМС-талонов, а также количество пациентов в талонах с разбивкой по отделениям.

На закладке Таблицы и условия выбора выбирается основная таблица запроса – Талоны. Так как нужно получить разбивку по отделениям, выбирается связанная с ней таблица Отделение (Отделения) (рис. 2.3.6).

 Рисунок 2.3.6. Формирование запроса "Талоны с разбивкой по типу": выбор таблиц


Рисунок 2.3.6. Формирование запроса "Талоны с разбивкой по типу": выбор таблиц

На закладке Запрашиваемые данные (рис. 2.3.7) в запрос добавляются:

·поля таблицы ТалоныДата талона и Прейскурант,

·поля таблицы ОтделенияКод Отделения и Отделение.

 Рисунок 2.3.7. Формирование запроса "Талоны с разбивкой по типу": выбор полей


Рисунок 2.3.7. Формирование запроса "Талоны с разбивкой по типу": выбор полей

Устанавливается фильтр по дате талона.

По полям Код отделения, Отделение, Прейскурант устанавливается группировка.

Поскольку нужно разделять талоны по прейскуранту (ОМС, ДМС), создается выражение Тип талона. Выражение в данном случае нужно для того, чтобы вместо значения поля-выборки INSURANCE_TYPE прописывалось "ДМС" или "ОМС" (это будет необходимо при настройке вида отчета — см. Вычислимые поля и авторазмножающиеся колонки). По этому выражению также производится группировка. Текст выражения:

%IF( FM_BILL.INSURANCE_TYPE='D', 'ДМС','ОМС' )

Для того чтобы получить количество талонов, выбирается поле FM_BILL_ID и по нему ставится счетчик, что соответствует функции COUNT (рис. 2.3.8).

 Рисунок 2.3.8. Создание счетчика по полю


Рисунок 2.3.8. Создание счетчика по полю

Для получения количества пациентов нельзя воспользоваться просто счетчиком по полю PATIENTS_ID, поскольку на одного пациента может быть создано несколько талонов, и в таком случае выражение COUNT(FM_BILL.PATIENTS_ID) вернет количество талонов; поэтому создается выражение Кол-во пациентов (рис. 2.3.9), в котором прописывается

COUNT (DISTINCT FM_BILL.PATIENTS_ID)

Оператор DISTINCT позволяет получить количество уникальных значений PATIENTS_ID. Тип агрегации в этом случае – ручная.

 Рисунок 2.3.9. Выражение с ручной агрегацией


Рисунок 2.3.9. Выражение с ручной агрегацией

Результат запроса показан на рис. 2.3.10.

 Рисунок 2.3.10. Результат запроса с группировкой и агрегатными функциями


Рисунок 2.3.10. Результат запроса с группировкой и агрегатными функциями