HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Описание</a></li>
1 <ul><li><a>Описание</a></li>
2 <li><a>Подготовка к работе</a></li>
2 <li><a>Подготовка к работе</a></li>
3 <li><a>Принцип работы оператора</a></li>
3 <li><a>Принцип работы оператора</a></li>
4 <li><a>Форма записи</a><ul><li><a>Множественные группы</a></li>
4 <li><a>Форма записи</a><ul><li><a>Множественные группы</a></li>
5 </ul></li>
5 </ul></li>
6 <li><a>Примеры работы</a><ul><li><a>Агрегатные функции</a><ul><li><a>Сумма</a></li>
6 <li><a>Примеры работы</a><ul><li><a>Агрегатные функции</a><ul><li><a>Сумма</a></li>
7 <li><a>Среднее значение</a></li>
7 <li><a>Среднее значение</a></li>
8 <li><a>Несколько групп</a></li>
8 <li><a>Несколько групп</a></li>
9 <li><a>Использование функций</a></li>
9 <li><a>Использование функций</a></li>
10 </ul></li>
10 </ul></li>
11 </ul></li>
11 </ul></li>
12 </ul><p>SQL - язык запросов. Он позволяет работать с базами данных в различных СУБД. Наиболее распространенной системой управления является MySQL. Она проста в освоении и подойдет как новичкам, так и более опытным разработчикам.</p>
12 </ul><p>SQL - язык запросов. Он позволяет работать с базами данных в различных СУБД. Наиболее распространенной системой управления является MySQL. Она проста в освоении и подойдет как новичкам, так и более опытным разработчикам.</p>
13 <p>При работе с таблицами в базах данных используются специальные команды. Они позволяют выполнять такие действия, как выборка, сортировка и пр. Особое внимание следует уделить оператору group by в SQL. Далее он будет изучен более подробно. Эта информация пригодится не только начинающим, но и уже продвинутым программистам, а также системным администраторам.</p>
13 <p>При работе с таблицами в базах данных используются специальные команды. Они позволяют выполнять такие действия, как выборка, сортировка и пр. Особое внимание следует уделить оператору group by в SQL. Далее он будет изучен более подробно. Эта информация пригодится не только начинающим, но и уже продвинутым программистам, а также системным администраторам.</p>
14 <h2>Описание</h2>
14 <h2>Описание</h2>
15 <p>Предложения Group By отвечают за группировку. При помощи таких запросов в SQL можно сопоставлять строки. Они встречаются в операциях с агрегатными функциями (Min, AVG, SUM, Count и Max).</p>
15 <p>Предложения Group By отвечают за группировку. При помощи таких запросов в SQL можно сопоставлять строки. Они встречаются в операциях с агрегатными функциями (Min, AVG, SUM, Count и Max).</p>
16 <p>Функция group by в языке SQL будет сообщать системе, как агрегировать данные в неагрегированном столбце, который был запрошен пользователем. Он используется для распределения строк - результата запроса по группам. Группировка данных в SQL при помощи соответствующей команды может осуществляться как по одному параметру, так и по нескольким одновременно.</p>
16 <p>Функция group by в языке SQL будет сообщать системе, как агрегировать данные в неагрегированном столбце, который был запрошен пользователем. Он используется для распределения строк - результата запроса по группам. Группировка данных в SQL при помощи соответствующей команды может осуществляться как по одному параметру, так и по нескольким одновременно.</p>
17 <h2>Подготовка к работе</h2>
17 <h2>Подготовка к работе</h2>
18 <p>Чтобы лучше понять, как работает упомянутый оператор, рекомендуется рассматривать процесс на наглядных примерах. Для этого придется провести небольшую предварительную подготовку. Она заключается в создании исходной таблицы с информацией. Пусть она называется sales и отображает простое представление продаж в магазинах. В ней будут поля:</p>
18 <p>Чтобы лучше понять, как работает упомянутый оператор, рекомендуется рассматривать процесс на наглядных примерах. Для этого придется провести небольшую предварительную подготовку. Она заключается в создании исходной таблицы с информацией. Пусть она называется sales и отображает простое представление продаж в магазинах. В ней будут поля:</p>
19 <ul><li>название локации (место);</li>
19 <ul><li>название локации (место);</li>
20 <li>имя продукта;</li>
20 <li>имя продукта;</li>
21 <li>стоимость;</li>
21 <li>стоимость;</li>
22 <li>время продажи.</li>
22 <li>время продажи.</li>
23 </ul><p>Для работы с группировкой в SQL-запросах типы полей в столбцах будут простыми TEXT (текстовыми). В уже существующем приложении обычно используются внешние ключи к другим таблицам.</p>
23 </ul><p>Для работы с группировкой в SQL-запросах типы полей в столбцах будут простыми TEXT (текстовыми). В уже существующем приложении обычно используются внешние ключи к другим таблицам.</p>
24 <p>Выше - описание таблицы, которую предстоит использовать далее для изучения принципов функционирования group by.</p>
24 <p>Выше - описание таблицы, которую предстоит использовать далее для изучения принципов функционирования group by.</p>
25 <p>В предложенном примере имеются три локации: HQ, 1st Street и Downtown. Здесь поддерживаются всего два продукта - кофе (coffee) и бублики (bagel). Продажи будут вноситься с разными значениями sold_at. Это требуется для демонстрации количества продукции, проданной в различные дни и время.</p>
25 <p>В предложенном примере имеются три локации: HQ, 1st Street и Downtown. Здесь поддерживаются всего два продукта - кофе (coffee) и бублики (bagel). Продажи будут вноситься с разными значениями sold_at. Это требуется для демонстрации количества продукции, проданной в различные дни и время.</p>
26 <p>Примеры, рассмотренные далее, будут отображать реализацию продукции "сегодня", "вчера", "позавчера".</p>
26 <p>Примеры, рассмотренные далее, будут отображать реализацию продукции "сегодня", "вчера", "позавчера".</p>
27 <h2>Принцип работы оператора</h2>
27 <h2>Принцип работы оператора</h2>
28 <p>Рассматривая примеры использования group by, необходимо понимать, как функционирует соответствующая команда. Рекомендуется для этого изучить жизненный случай.</p>
28 <p>Рассматривая примеры использования group by, необходимо понимать, как функционирует соответствующая команда. Рекомендуется для этого изучить жизненный случай.</p>
29 <p>Дана комната, в которой много людей. Они родились в самых разных странах. Требуется вычислить средний рост людей в разрезе по месту рождения. Для этого сначала происходит разделение людей на группы по странам, из которых они прибыли. Только после этого удастся рассчитать средний рост в каждом сформированном "классе".</p>
29 <p>Дана комната, в которой много людей. Они родились в самых разных странах. Требуется вычислить средний рост людей в разрезе по месту рождения. Для этого сначала происходит разделение людей на группы по странам, из которых они прибыли. Только после этого удастся рассчитать средний рост в каждом сформированном "классе".</p>
30 <p>Аналогичным образом функционирует рассматриваемый оператор. Теперь ясно, как работает group by. Эта функция группирует информацию по строкам. Сначала нужно определить, как будет осуществляться классификация. После - произвести необходимые вычисления или агрегации.</p>
30 <p>Аналогичным образом функционирует рассматриваемый оператор. Теперь ясно, как работает group by. Эта функция группирует информацию по строкам. Сначала нужно определить, как будет осуществляться классификация. После - произвести необходимые вычисления или агрегации.</p>
31 <h2>Форма записи</h2>
31 <h2>Форма записи</h2>
32 <p>Предложение Group By будет зависеть от непосредственного использования группирования. Общая форма записи следующая:</p>
32 <p>Предложение Group By будет зависеть от непосредственного использования группирования. Общая форма записи следующая:</p>
33 <p> SELECT название_столбцов </p>
33 <p> SELECT название_столбцов </p>
34 <p> FROM имя_имеющейся_таблицы</p>
34 <p> FROM имя_имеющейся_таблицы</p>
35 <p> [WHERE необходимые условия для выборки полей]</p>
35 <p> [WHERE необходимые условия для выборки полей]</p>
36 <p> GROUP BY имена_стоблцов_в_таблице</p>
36 <p> GROUP BY имена_стоблцов_в_таблице</p>
37 <p> Если необходимо вывести всего один столбец, по которому осуществляется группировка, оператор будет выбирать уникальные значения. Дубликаты из результирующей таблицы убираются. В данном случае group by функционирует точно также, как и ключевое слово DISTINCT.</p>
37 <p> Если необходимо вывести всего один столбец, по которому осуществляется группировка, оператор будет выбирать уникальные значения. Дубликаты из результирующей таблицы убираются. В данном случае group by функционирует точно также, как и ключевое слово DISTINCT.</p>
38 <h3>Множественные группы</h3>
38 <h3>Множественные группы</h3>
39 <p>Рассматриваемый оператор позволяет группировать информацию в самое разное количество групп и подгрупп. Представленные при помощи group by примеры далее наглядно продемонстрируют соответствующие операции.</p>
39 <p>Рассматриваемый оператор позволяет группировать информацию в самое разное количество групп и подгрупп. Представленные при помощи group by примеры далее наглядно продемонстрируют соответствующие операции.</p>
40 <p>Предложения группировки в SQL применяются тогда, когда можно использовать такие обороты как:</p>
40 <p>Предложения группировки в SQL применяются тогда, когда можно использовать такие обороты как:</p>
41 <ul><li>по чему-то;</li>
41 <ul><li>по чему-то;</li>
42 <li>в каждом.</li>
42 <li>в каждом.</li>
43 </ul><p>Примеры - людей можно разделить по среднему росту по стране рождения, а также выяснить общее количество лиц в каждом "классе" с тем или иным цветом волос. В случае с подготовленной ранее таблицей администратор способен уточнить общее количество продаж по каждому продукту.</p>
43 </ul><p>Примеры - людей можно разделить по среднему росту по стране рождения, а также выяснить общее количество лиц в каждом "классе" с тем или иным цветом волос. В случае с подготовленной ранее таблицей администратор способен уточнить общее количество продаж по каждому продукту.</p>
44 <h2>Примеры работы</h2>
44 <h2>Примеры работы</h2>
45 <p>Далее будут приведены несколько наглядных примеров использования group by в программном коде. Сам оператор составляется легко: достаточно указать соответствующее ключевое слово и прописать поля, по которым осуществляется группировка:</p>
45 <p>Далее будут приведены несколько наглядных примеров использования group by в программном коде. Сам оператор составляется легко: достаточно указать соответствующее ключевое слово и прописать поля, по которым осуществляется группировка:</p>
46 <p>В Select as размещают описание локации. Данные будут группироваться по соответствующему столбцу. Чтобы увидеть имена созданных групп, необходимо воспользоваться следующей записью group by:</p>
46 <p>В Select as размещают описание локации. Данные будут группироваться по соответствующему столбцу. Чтобы увидеть имена созданных групп, необходимо воспользоваться следующей записью group by:</p>
47 <p>Если посмотреть на необработанную часть таблицы, можно заметить 4 строчки с локацией HQ, две - с Downtown и 1st street.</p>
47 <p>Если посмотреть на необработанную часть таблицы, можно заметить 4 строчки с локацией HQ, две - с Downtown и 1st street.</p>
48 <p>При grouping by location база возьмет соответствующие входные строки и определит среди них уникальные локации. Они будут выступать в виде "групп", по которым осуществляется дальнейшая классификация.</p>
48 <p>При grouping by location база возьмет соответствующие входные строки и определит среди них уникальные локации. Они будут выступать в виде "групп", по которым осуществляется дальнейшая классификация.</p>
49 <p>Если выбрать столбец product, команда будет несколько иной:</p>
49 <p>Если выбрать столбец product, команда будет несколько иной:</p>
50 <p>Результатом станет ошибка:</p>
50 <p>Результатом станет ошибка:</p>
51 <p>Связано это с тем, что 8 строк, имеющихся в базе, при помощи group by пользователь попытался "поместить" в 3. Оставшиеся столбцы не получится возвращать просто так. Для применения всех данных из таблицы необходимо выделить соответствующую информацию из "остатка" в три локационные groups. Это значит, что сведения должны быть или агрегированы, или над ними обязательно выполняются вычисления для вывода результирующих данных.</p>
51 <p>Связано это с тем, что 8 строк, имеющихся в базе, при помощи group by пользователь попытался "поместить" в 3. Оставшиеся столбцы не получится возвращать просто так. Для применения всех данных из таблицы необходимо выделить соответствующую информацию из "остатка" в три локационные groups. Это значит, что сведения должны быть или агрегированы, или над ними обязательно выполняются вычисления для вывода результирующих данных.</p>
52 <h3>Агрегатные функции</h3>
52 <h3>Агрегатные функции</h3>
53 <p>Далее предстоит рассмотреть несколько примеров с агрегатными функциями относительно group by. Каждая запись в sales - это информация об одной продаже. Это значит, что число продаж по локации = строки в каждой группе при разделении по локациям.</p>
53 <p>Далее предстоит рассмотреть несколько примеров с агрегатными функциями относительно group by. Каждая запись в sales - это информация об одной продаже. Это значит, что число продаж по локации = строки в каждой группе при разделении по локациям.</p>
54 <p>Для получения информации о том, сколько в каждом "месте" было продано продукции, используется такая запись с group by:</p>
54 <p>Для получения информации о том, сколько в каждом "месте" было продано продукции, используется такая запись с group by:</p>
55 <p>При помощи count вычисляется количество строк в каждой группе. С выражениями команда тоже совмещается.</p>
55 <p>При помощи count вычисляется количество строк в каждой группе. С выражениями команда тоже совмещается.</p>
56 <p>База выполняет запрос так:</p>
56 <p>База выполняет запрос так:</p>
57 <ul><li>from sales - получение всех записей из таблицы sales;</li>
57 <ul><li>from sales - получение всех записей из таблицы sales;</li>
58 <li>group by location - определение уникальных групп по типу локаций;</li>
58 <li>group by location - определение уникальных групп по типу локаций;</li>
59 <li>select… - выбор имени "места" и счет количества строк в группе.</li>
59 <li>select… - выбор имени "места" и счет количества строк в группе.</li>
60 </ul><p>Для вывода информации в читабельной форме, количество строк (результат) будет иметь псевдоним as number_of_sales. Итоговая таблица предлагает две колонки:</p>
60 </ul><p>Для вывода информации в читабельной форме, количество строк (результат) будет иметь псевдоним as number_of_sales. Итоговая таблица предлагает две колонки:</p>
61 <h4><em>Сумма</em></h4>
61 <h4><em>Сумма</em></h4>
62 <p>Sum - команда, которая помогает при помощи group by суммировать информацию. Пример - расчет общей выручки в каждом городе:</p>
62 <p>Sum - команда, которая помогает при помощи group by суммировать информацию. Пример - расчет общей выручки в каждом городе:</p>
63 <p>Выше - пример обработки соответствующего запроса.</p>
63 <p>Выше - пример обработки соответствующего запроса.</p>
64 <h4><em>Среднее значение</em></h4>
64 <h4><em>Среднее значение</em></h4>
65 <p>Для расчета среднего значения в group by необходимо пользоваться AVG:</p>
65 <p>Для расчета среднего значения в group by необходимо пользоваться AVG:</p>
66 <p>Вот - пример средней суммы выручки.</p>
66 <p>Вот - пример средней суммы выручки.</p>
67 <h4><em>Несколько групп</em></h4>
67 <h4><em>Несколько групп</em></h4>
68 <p>Чтобы разделить группы на подгруппы достаточно добавить к предложению group by второе условие классификации:</p>
68 <p>Чтобы разделить группы на подгруппы достаточно добавить к предложению group by второе условие классификации:</p>
69 <p>Результат может быть возвращен при помощи select. Order by добавлено для удобства:</p>
69 <p>Результат может быть возвращен при помощи select. Order by добавлено для удобства:</p>
70 <p>Вот пример продаж по каждому продукту:</p>
70 <p>Вот пример продаж по каждому продукту:</p>
71 <p>Ничего трудного в процессе нет. Но group by может работать с функциями.</p>
71 <p>Ничего трудного в процессе нет. Но group by может работать с функциями.</p>
72 <h4><em>Использование функций</em></h4>
72 <h4><em>Использование функций</em></h4>
73 <p>Можно попытаться найти общее количество продаж в день. Для этого используется шаблон, который применялся со столбцом sold_at:</p>
73 <p>Можно попытаться найти общее количество продаж в день. Для этого используется шаблон, который применялся со столбцом sold_at:</p>
74 <p>Для получения данных в нужном формате необходимо конвертировать значения даты и времени для каждой записи в обычную дату. После - все записи о продажах, совершенных в один и тот же день, отнести к одной "общей" группе.</p>
74 <p>Для получения данных в нужном формате необходимо конвертировать значения даты и времени для каждой записи в обычную дату. После - все записи о продажах, совершенных в один и тот же день, отнести к одной "общей" группе.</p>
75 <p><a>Здесь</a>можно увидеть больше примеров использования изученного оператора.<em>Прокачать <a>навыки работы с базами данных</a> можно на курсах Otus</em>.<a></a></p>
75 <p><a>Здесь</a>можно увидеть больше примеров использования изученного оператора.<em>Прокачать <a>навыки работы с базами данных</a> можно на курсах Otus</em>.<a></a></p>
76  
76