Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.41 Mб
Скачать

Группировка и агрегаты.

Агрегатные функции:

Max() Возвращает максимальное значение из набора.

Min() Возвращает минимальное значение из набора.

Avg() Возвращает среднее значение набора.

Sum() Возвращает сумму значений из набора.

Count() Возвращает количество значений в наборе.

SELECT MAX(price),

MIN(price),

AVG(price),

SUM(price),

COUNT(*)

FROM realization;

Мало кого заинтересуют необработанные данные; тем, кто занимается анализом, потребуются обработанные данные, приведенные к виду, наиболее соответствующему их нуждам.

Необходимо понять, что такое группировка:

ФИО

ТОВАР

КОЛИЧЕСТВО

ЦЕНА

Иванов

принтер

2

2500

Петров

мышь

1

1500

Иванов

принтер

2

2500

Иванов

мышь

1

1500

Петров

принтер

1

2500

Петров

принтер

1

2500

Лосев

Ноутбук

1

40000

Лосев

ноутбук

2

40000

Иванов

мышь

1

1500

Группировка может быть по какому-либо столбцу. Например, группировка по ФИО будет выглядеть следующим образом:

ФИО

ТОВАР

КОЛИЧЕСТВО

ЦЕНА

Иванов

ИТОГ

Иванов

принтер

2

2500

Иванов

принтер

2

2500

Иванов

мышь

1

1500

Иванов

мышь

1

1500

Петров

ИТОГ

Петров

мышь

1

1500

Петров

принтер

1

2500

Петров

принтер

1

2500

Лосев

ИТОГ

Лосев

Ноутбук

1

40000

Лосев

ноутбук

2

40000

1. Это самая простая группировка:

SELECT customer, SUM(count*price)

FROM realization

GROUP BY customer;

Этот запрос выявит все группировки по клиентам и посчитает итог по каждой группировке. В данном случае итог – это сумма вычисляемого столбца count*price.

Здесь добавлен новый блок GROUP BY.

2. В некоторых случаях может понадобиться сформировать группы, охватывающие более одного столбца.

SELECT customer, product, SUM(count*price)

FROM realization

GROUP BY customer, product;

3. Если мы хотим увидеть не только окончательные итоги, но и промежуточные итоги, то необходимо использовать предложение with rollup в блоке group by:

SELECT customer, product, SUM(count*price)

FROM realization

GROUP BY customer, product with rollup;

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

формирования групп. Этот тип условий фильтрации должен располагаться в блоке having.

SELECT customer, SUM(count*price)

FROM realization

GROUP BY customer

HAVING SUM(count*price)>5000;

Фильтр WHERE воздействует на данные до группировки, а HAVING– после создания групп. В блок having можно включить агрегатные функции, не перечисленные в блоке select, в блок WHERE нельзя включать агрегатные функции.