0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы продолжим работать с данными из<a>базы продаж</a>и на этом примере рассмотрим важнейшую функцию для аналитика - группировку.</p>
1
<p>В этом уроке мы продолжим работать с данными из<a>базы продаж</a>и на этом примере рассмотрим важнейшую функцию для аналитика - группировку.</p>
2
<p>Эта функция позволяет объединить строки на основе определенного столбца или набора столбцов, а затем сгруппировать их в одну запись. Таким образом, мы сможем вычислить:</p>
2
<p>Эта функция позволяет объединить строки на основе определенного столбца или набора столбцов, а затем сгруппировать их в одну запись. Таким образом, мы сможем вычислить:</p>
3
<ul><li>Общее количество проданных товаров по каждой категории - так мы определим самые популярные категорий продуктов</li>
3
<ul><li>Общее количество проданных товаров по каждой категории - так мы определим самые популярные категорий продуктов</li>
4
<li>Среднюю цену продукта в каждой категории - найдем категории с самой высокой и низкой ценой</li>
4
<li>Среднюю цену продукта в каждой категории - найдем категории с самой высокой и низкой ценой</li>
5
<li>Общее количество продаж в каждом магазине - найдем наиболее и наименее успешные магазины</li>
5
<li>Общее количество продаж в каждом магазине - найдем наиболее и наименее успешные магазины</li>
6
<li>Общее количество продаж по каждому региону - определим региональные тенденции и паттерны</li>
6
<li>Общее количество продаж по каждому региону - определим региональные тенденции и паттерны</li>
7
</ul><h2>Оператор GROUP BY</h2>
7
</ul><h2>Оператор GROUP BY</h2>
8
<p>Группировка в SQL выполняется с помощью оператора GROUP BY. При выполнении запроса с GROUP BY каждая строка результата является группой. Другими словами, она представляет одну или несколько строк с такими же значениями в одном или нескольких указанных столбцах.</p>
8
<p>Группировка в SQL выполняется с помощью оператора GROUP BY. При выполнении запроса с GROUP BY каждая строка результата является группой. Другими словами, она представляет одну или несколько строк с такими же значениями в одном или нескольких указанных столбцах.</p>
9
<p>Для примера сравним два запроса. Первый из них возвращает количество проданных товаров для магазинов с id = 3:</p>
9
<p>Для примера сравним два запроса. Первый из них возвращает количество проданных товаров для магазинов с id = 3:</p>
10
<p>Второй запрос помещает все продажи из магазина с id = 3 в группу. Затем он возвращает информацию об этой группе - общее количество продаж, общую сумму продаж, минимальную и максимальную продажу:</p>
10
<p>Второй запрос помещает все продажи из магазина с id = 3 в группу. Затем он возвращает информацию об этой группе - общее количество продаж, общую сумму продаж, минимальную и максимальную продажу:</p>
11
<p>Представим, что мы не знаем об операторе GROUP BY. В таком случае мы не смогли бы организовать группу магазинов с id = 3 в одну группу и получить информацию из второго запроса. Нам пришлось бы вручную анализировать строки для этого магазина.</p>
11
<p>Представим, что мы не знаем об операторе GROUP BY. В таком случае мы не смогли бы организовать группу магазинов с id = 3 в одну группу и получить информацию из второго запроса. Нам пришлось бы вручную анализировать строки для этого магазина.</p>
12
<p>В примере выше группа содержала всего две строки, поэтому проблем не возникло. Но если бы таких строк было сотни или тысячи, ситуация бы кардинально поменялась. Таким образом, группировка результатов помогает получить информацию о многих строках таблицы без необходимости проверять каждую из них по отдельности.</p>
12
<p>В примере выше группа содержала всего две строки, поэтому проблем не возникло. Но если бы таких строк было сотни или тысячи, ситуация бы кардинально поменялась. Таким образом, группировка результатов помогает получить информацию о многих строках таблицы без необходимости проверять каждую из них по отдельности.</p>
13
<h2>Взаимосвязь между SELECT и GROUP BY</h2>
13
<h2>Взаимосвязь между SELECT и GROUP BY</h2>
14
<p>При группировке важно понимать взаимосвязь между операторами SELECT и GROUP BY.</p>
14
<p>При группировке важно понимать взаимосвязь между операторами SELECT и GROUP BY.</p>
15
<p>В работе с COUNT и другими агрегатными функциями важно не забывать, что любой элемент в списке SELECT должен быть частью группы, если он не является аргументом агрегатной функции.</p>
15
<p>В работе с COUNT и другими агрегатными функциями важно не забывать, что любой элемент в списке SELECT должен быть частью группы, если он не является аргументом агрегатной функции.</p>
16
<p>Для примера попробуем записать выражение SELECT в таком виде:</p>
16
<p>Для примера попробуем записать выражение SELECT в таком виде:</p>
17
<p>Чтобы запрос сработал верно, нужно указать store_id в операторе GROUP BY:</p>
17
<p>Чтобы запрос сработал верно, нужно указать store_id в операторе GROUP BY:</p>
18
<p>В итоге мы получим такой результат:</p>
18
<p>В итоге мы получим такой результат:</p>
19
<h2>Группировка по нескольким показателям</h2>
19
<h2>Группировка по нескольким показателям</h2>
20
<p>Группировка данных по нескольким показателям - это один из наиболее эффективных способов более глубокого анализа.</p>
20
<p>Группировка данных по нескольким показателям - это один из наиболее эффективных способов более глубокого анализа.</p>
21
<p>Она позволяет провести дополнительные исследования на разных уровнях детализации - например, сравнить разные комбинации и сегментировать данные по нескольким критериям. Группировка данных по нескольким показателям расширяет наши возможности и выявляет зависимости и тенденции, которые не видны при обычном анализе данных.</p>
21
<p>Она позволяет провести дополнительные исследования на разных уровнях детализации - например, сравнить разные комбинации и сегментировать данные по нескольким критериям. Группировка данных по нескольким показателям расширяет наши возможности и выявляет зависимости и тенденции, которые не видны при обычном анализе данных.</p>
22
<p>Допустим, мы хотим провести группировку по региону и городу, чтобы получить общее количество географических точек продаж наших товаров:</p>
22
<p>Допустим, мы хотим провести группировку по региону и городу, чтобы получить общее количество географических точек продаж наших товаров:</p>
23
<p>Результатом стал набор строк, содержащих уникальные комбинации региона и города, а также соответствующее количество точек продаж для каждой комбинации:</p>
23
<p>Результатом стал набор строк, содержащих уникальные комбинации региона и города, а также соответствующее количество точек продаж для каждой комбинации:</p>
24
<h2>Оператор HAVING</h2>
24
<h2>Оператор HAVING</h2>
25
<p>Оператор HAVING используется для фильтрации данных на основе агрегатных функций после выполнения группировки с помощью оператора GROUP BY. В отличие от оператора WHERE, который фильтрует строки перед группировкой, оператор HAVING фильтрует группы после группировки.</p>
25
<p>Оператор HAVING используется для фильтрации данных на основе агрегатных функций после выполнения группировки с помощью оператора GROUP BY. В отличие от оператора WHERE, который фильтрует строки перед группировкой, оператор HAVING фильтрует группы после группировки.</p>
26
<p>Предположим, мы хотим найти категории товаров, у которых средняя цена превышает 50:</p>
26
<p>Предположим, мы хотим найти категории товаров, у которых средняя цена превышает 50:</p>
27
<p>В этом запросе мы сначала проводим группировку по категории товаров с помощью оператора GROUP BY. Затем с помощью агрегатной функции AVG(price) мы вычисляем среднюю цену для каждой категории. В конце мы используем оператор HAVING, чтобы ограничить результаты только категориями со средней ценой выше 50.</p>
27
<p>В этом запросе мы сначала проводим группировку по категории товаров с помощью оператора GROUP BY. Затем с помощью агрегатной функции AVG(price) мы вычисляем среднюю цену для каждой категории. В конце мы используем оператор HAVING, чтобы ограничить результаты только категориями со средней ценой выше 50.</p>
28
<p>Результатом будет набор строк с категориями товаров, у которых средняя цена больше 50.</p>
28
<p>Результатом будет набор строк с категориями товаров, у которых средняя цена больше 50.</p>
29
<p>Важно отметить разницу между операторами:</p>
29
<p>Важно отметить разницу между операторами:</p>
30
<ul><li>HAVING работает с агрегатными функциями и фильтрует результаты группировки. Оператор HAVING проводит условное выражение на основе агрегатных функций и фильтрует группы данных</li>
30
<ul><li>HAVING работает с агрегатными функциями и фильтрует результаты группировки. Оператор HAVING проводит условное выражение на основе агрегатных функций и фильтрует группы данных</li>
31
<li>WHERE проводит фильтрацию до группировки, то есть он фильтрует отдельные строки</li>
31
<li>WHERE проводит фильтрацию до группировки, то есть он фильтрует отдельные строки</li>
32
</ul><h2>Выводы</h2>
32
</ul><h2>Выводы</h2>
33
<p>На этом уроке мы изучили группировки в SQL и узнали следующее:</p>
33
<p>На этом уроке мы изучили группировки в SQL и узнали следующее:</p>
34
<ul><li>Оператор GROUP BY группирует строки на основе определенного столбца или набора столбцов, а затем объединяет их в одну запись</li>
34
<ul><li>Оператор GROUP BY группирует строки на основе определенного столбца или набора столбцов, а затем объединяет их в одну запись</li>
35
<li>Группировка позволяет проводить агрегацию и анализ на уровне групп, что дает более компактную и сводную информацию о данных</li>
35
<li>Группировка позволяет проводить агрегацию и анализ на уровне групп, что дает более компактную и сводную информацию о данных</li>
36
<li>Оператор GROUP BY работает вместе с агрегатными функциями COUNT, SUM, AVG. Так можно вычислять сумму, средние значения и другие статистические метрики внутри каждой группы</li>
36
<li>Оператор GROUP BY работает вместе с агрегатными функциями COUNT, SUM, AVG. Так можно вычислять сумму, средние значения и другие статистические метрики внутри каждой группы</li>
37
<li>Оператор HAVING фильтрует данные после выполнения группировки и позволяет применять условные выражения на агрегатные функции</li>
37
<li>Оператор HAVING фильтрует данные после выполнения группировки и позволяет применять условные выражения на агрегатные функции</li>
38
<li>Оператор WHERE фильтрует строки до группировки, а HAVING - после нее</li>
38
<li>Оператор WHERE фильтрует строки до группировки, а HAVING - после нее</li>
39
</ul><p>Далее мы научимся сортировать результаты фильтрации и группировки данных по определенным условиям.</p>
39
</ul><p>Далее мы научимся сортировать результаты фильтрации и группировки данных по определенным условиям.</p>