В чем разница между ORDER BY и GROUP BY?
Уж простите за прямоту, но ORDER — сортирует, а GROUP — группирует.
Отслеживать
ответ дан 31 мая 2020 в 17:51
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Разница между группами By и Order By в SQL

SQL позволяет систематизировать данные, полученные по запросу. У нас есть два предложения для организации данных, полученных из запроса: предложения Group By и Order By. Пункт, который отличает предложения Group By и Order By, заключается в том, что предложение Group By используется, когда мы хотим применить агрегатную функцию к более чем одному набору кортежей, и предложение Order By используется, когда мы хотим отсортировать данные, полученные запросом. Давайте обсудим некоторые различия между предложением Group By и предложением Order By с помощью сравнительной таблицы, показанной ниже.
Сравнительная таблица
| Основа для сравнения | Группа по | Сортировать по |
|---|---|---|
| основной | Group By используется для формирования группы из набора кортежей. | Упорядочить по используется для упорядочения данных, полученных в результате запроса, в отсортированной форме. |
| атрибут | Атрибут в функции Aggregate не может быть в предложении Group By. | Атрибут в совокупности может быть в порядке по предложению. |
| земля | Сделано на основании сходства значений атрибутов. | Сделано на основании восходящего и нисходящего порядка. |
Определение группы по пункту
Агрегатные функции, такие как avg, min, max, sum, count, применяются к одному набору кортежей. В случае, если вы хотите применить агрегатные функции к группе из набора кортежей, у нас есть предложение Group by для этого. Предложение «Группировать по» группирует кортежи с одинаковым значением атрибута.
Следует помнить одну вещь о предложении Group By: убедитесь, что атрибут в предложении Group By должен присутствовать в предложении SELECT, но не в статистической функции . Если предложение Group By содержит атрибут, который находится не в предложении SELECT, или если он находится в предложении SELECT, но под агрегатной функцией, запрос становится ошибочным. Следовательно, мы можем сказать, что предложение Group By всегда используется в сотрудничестве с предложением SELECT.
Давайте возьмем пример для понимания предложения Group By.

ВЫБЕРИТЕ Отдел _ID, avg (Зарплата) как avg_salary из Учительской группы По Department_ID.

Вы можете видеть, что изначально формируется промежуточный результат, который сгруппировал отделы.

Далее, агрегатная функция avg применяется к каждой группе отделов, и результат показан ниже.
Определение порядка по пунктам
Предложение Order By используется для отображения данных, полученных по запросу, в отсортированном порядке. Как и предложение Group By, предложение Order By также используется в сотрудничестве с предложением SELECT. Если вы не упомянули порядок сортировки, предложение Order By сортирует данные в порядке возрастания. Вы можете указать восходящий порядок как asc и нисходящий порядок как desc .
Давайте разберемся с работой пункта Order By с помощью следующего примера. У нас есть таблица учителя, и я буду применять сортировку к двум столбцам Department_Id и Salary таблицы учителя.

Выберите Department_ID, Заработная плата из заказа учителя по Department_Id asc, Зарплата desc.

Вы можете видеть, что сначала он упорядочивает _ID отдела в порядке возрастания, а затем упорядочивает оклады в том же отделе в порядке убывания.
Ключевые различия между группами By и Order By
- Предложение Group By группирует набор кортежей в отношении, которые находятся в предложении SELECT. С другой стороны, предложение Order By сортирует результат запроса в порядке возрастания или убывания.
- Атрибут в агрегатной функции не может быть в предложении Group By, тогда как атрибут в агрегатной функции может быть в предложении Order By.
- Группировка кортежей выполняется на основе сходства значений атрибутов кортежей. С другой стороны, упорядочение или сортировка выполняется на основе возрастающего или убывающего порядка.
Заключение:
Если вы хотите сформировать группу из набора кортежей, то вы должны использовать предложение Group By. Если вы хотите упорядочить данные одного столбца или нескольких столбцов в наборе кортежей в порядке возрастания или убывания, то следует использовать предложение Order By.
Group by vs Order by: Чем они отличаются и как правильно выбирать?
Для работы с базами данных необходимо знать основные инструменты языка структурированных запросов SQL. Среди них особое место занимают команды GROUP BY и ORDER BY, которые используются для группировки и сортировки данных соответственно.
Зачастую новички в програмировании путают эти команды, не понимая, что они делают и как они взаимодействуют друг с другом. Однако понимание различий между GROUP BY и ORDER BY и корректный выбор подходящего метода для работы с данными могут значительно ускорить и улучшить анализ информации.
В данной статье мы рассмотрим в чем отличия между GROUP BY и ORDER BY, когда их применение оправдано и каким образом выбирать между этими командами при работе с базами данных.
Группировка и сортировка: как выбрать?
Чем отличаются Group by и Order by?
Group by и Order by — это две разные операции в SQL, которые позволяют сгруппировать и отсортировать данные в таблице.
Order by сортирует данные по заданному столбцу в порядке возрастания или убывания. Это полезно для получения упорядоченного списка значений, но не позволяет сгруппировать данные или проводить агрегатные функции.
Group by, с другой стороны, группирует данные по заданному столбцу и проводит агрегатные функции, такие как сумма, среднее, максимальное и минимальное значения. Это полезно для получения суммарной информации о группированных данных.
Как выбрать между Group by и Order by?
Выбор между Group by и Order by зависит от того, что вы хотите достичь. Если вы хотите упорядочить данные в таблице, то используйте Order by. Если вы хотите получить суммарную информацию о группированных данных, то используйте Group by.
Кроме того, убедитесь, что вы правильно выбрали столбец для сортировки или группировки. Если выбранный столбец не подходит для вашей задачи, результаты могут быть неправильными.
- Order by может быть полезен, если вы хотите получить список значений в определенном порядке, например, по алфавиту или возрастанию чисел.
- Group by может быть полезен, если вы хотите получить суммарную информацию, например, сколько товаров было продано каждым продавцом или общее количество заказов в каждом месяце.
Правильный выбор между Group by и Order by поможет получить нужную информацию из таблицы и ускорит процесс обработки данных.
Определение
Group by и Order by — два важных запроса в SQL, которые используются для обработки и сортировки данных в таблицах баз данных. Однако, где Group by используется для группировки данных в соответствии с определенным критерием, Order by используется для сортировки данных по различным столбцам таблицы. Оба запроса имеют свои уникальные функции и могут использоваться в зависимости от конкретных требований и условий.
Group by — это запрос, который позволяет сгруппировать данные в таблице на основе определенных столбцов. Это делается для того, чтобы проанализировать данные и получить более понятные результаты. Группировка может быть выполнена для разных целей, например, для агрегирования данных или вычисления статистики. Group by является одним из наиболее часто используемых запросов.
Order by — это запрос, который используется для сортировки данных в таблице по одному или нескольким столбцам. Важно, чтобы порядок сортировки был определенным образом, то есть по возрастанию или по убыванию значений в столбцах. Order by может использоваться для определения ранжирования данных в таблице и для получения наиболее актуальных результатов.
Как работает Order by
Order by — это оператор, который позволяет упорядочивать данные в запросе в порядке возрастания или убывания. Он применяется к столбцам таблицы и может быть использован вместе с другими операторами, такими как Select, Where и Group by.
После указания столбца, по которому должна произойти сортировка, можно задать порядок сортировки — ASC (ascending) или DESC (descending). По умолчанию, если порядок не указан, используется порядок ASC.
Order by выполняется после работы всех операторов, поэтому можно использовать агрегирующие функции и Group by в запросе. Он не изменяет данные в таблице, а только отображает их в нужном порядке.
Важно помнить, что использование Order by может снизить производительность запроса, особенно если таблица содержит большое количество данных. Поэтому следует использовать его только в тех случаях, когда необходимость в сортировке данных превышает затраты на выполнение запроса.
Как работает Group by
Group by — это оператор SQL, который используется для объединения строк в группы на основе значений одного или нескольких столбцов. Каждая группа представляет собой набор строк с одинаковыми значениями в столбцах, по которым они были сгруппированы.
Подробно процесс работы оператора Group by выглядит следующим образом: после того, как были выбраны нужные столбцы, они сгруппируются по значениям конкретных столбцов, указанных в команде Group by. В результате в выборке получится набор уникальных комбинаций данных из этих столбцов.
Оператор Group by может использоваться с другими функциями SQL, например, с функцией агрегации, такой как count или sum, чтобы посчитать количество строк в каждой группе или сумму значений в определенной группе.
Использование оператора Group by в SQL может ускорить выполнение запроса и сократить количество строк в результате. Это особенно полезно, когда нужно просмотреть данные статистических группировок, например, в финансовой или бухгалтерской отчетности.
Основные различия между Order by и Group by
Order by и Group by — это две важные конструкции SQL для работы с данными в таблицах. Они оба позволяют упорядочивать данные по конкретным столбцам. Однако они имеют разные функции и применяются в разных ситуациях.
Оператор Order by позволяет сортировать данные в таблице по заданному столбцу. Его использование производится, когда необходимо получить данные в определенном порядке. Например, если нужно отсортировать список клиентов по алфавитному порядку фамилий.
С другой стороны, Group by используется для объединения строк в таблице, основываясь на значениях в определенных столбцах. Это позволяет получить суммарные данные для каждой группы в таблице. Например, если нужно получить общую стоимость продаж каждого продукта в магазине.
Таким образом, основное различие между Order by и Group by заключается в том, что первый используется для организации данных по определенному столбцу, а второй — для группировки данных по значениям в столбцах и получения итоговых результатов.
Как выбрать между Order by и Group by?
Перед тем как решить, какой оператор использовать — Order by или Group by — необходимо понимать, что они делают. Order by сортирует результаты запроса по заданным критериям, а Group by группирует данные по выбранному столбцу или столбцам и применяет функции, такие как COUNT и SUM, к каждой группе.
Если вы хотите узнать количество записей в каждой группе, например, сколько клиентов есть в каждой стране, нужно использовать Group by. Если же вам нужно отсортировать данные по определенному столбцу, например, список клиентов, отсортированных по фамилии, лучше использовать Order by.
Важно понимать, что при использовании Group by результат запроса может содержать только те столбцы, которые перечислены в группировке или в функциях агрегации, таких как COUNT или SUM. Поэтому, если вы хотите получить все столбцы таблицы, используйте Order by.
Кроме того, Group by может занимать больше времени, так как результат запроса группируется по заданным столбцам. При использовании Order by, сортировка выполняется быстрее, так как данные не группируются.
Таким образом, выбор между Order by и Group by зависит от задачи, которую вы хотите решить. Если вам нужно просто отсортировать результаты запроса, используйте Order by. Если требуется группировка данных для анализа, используйте Group by.
Примеры использования Order by и Group by
Order by позволяет отсортировать результаты запроса в нужном порядке. Примером может быть запрос на выборку всех сотрудников компании, отсортированных по фамилии в алфавитном порядке. SELECT * FROM employees ORDER BY last_name ASC;
Group by используется для группировки строк по определенному столбцу и применения агрегатных функций к каждой группе. Например, запрос на выборку средней зарплаты сотрудников по каждому отделу компании: SELECT department, AVG(salary) FROM employees GROUP BY department;
Также можно использовать оба оператора вместе. Например, запрос на выборку списка департаментов компании с количеством сотрудников в каждом департаменте, отсортированных по количеству сотрудников в порядке убывания: SELECT department, COUNT(*) FROM employees GROUP BY department ORDER BY COUNT(*) DESC;
Правильный выбор между Order by и Group by зависит от цели запроса. Если необходимо только отсортировать результаты, то используется Order by, а если нужно сгруппировать данные и применить к ним агрегатные функции, то используется Group by.
Рекомендации при использовании Order by и Group by
При использовании оператора Order by следует обратить внимание на сортировочный порядок данных. Например, можно отсортировать данные по возрастанию или убыванию. Однако, при больших объемах данных сортировка может значительно замедлить работу запроса. Поэтому необходимо учитывать баланс между точностью сортировки и скоростью выполнения запроса.
Касательно использования оператора Group by, важно правильно выбирать группирующие поля. Необходимо помнить, что каждое поле участвующее в группировке может уменьшить производительность запроса. Поэтому необходимо выбирать только необходимые поля для группировки. Кроме того, при использовании оператора Group by, необходимо учитывать дополнительные ограничения на операции (например, необходимость использования агрегатных функций).
Важно учитывать, что как Order by, так и Group by могут быть дорогостоящими операциями. При написании сложных запросов необходимо обратить внимание на оптимизацию. Можно использовать индексы или денормализацию данных для ускорения выполнения запросов.
- Правильно выбирать сортировочный порядок при использовании Order by
- Выбирать только необходимые поля для группировки при использовании Group by
- Учитывать дополнительные ограничения на операции в Group by
- Оптимизировать запросы с помощью индексов или денормализации данных
Оператор SQL GROUP BY для группировки в запросах
Оператор SQL GROUP BY служит для распределения строк — результата запроса — по группам, в которых значения некоторого столбца, по которому происходит группировка, являются одинаковыми. Группировку можно производить как по одному столбцу, так и по нескольким.
Часто оператор SQL GROUP BY применяется вместе с агрегатными функциями (COUNT, SUM, AVG, MAX, MIN). В этих случаях агрегатные функции служат для вычисления соответствующего агрегатного значения ко всему набору строк, для которых некоторый столбец — общий.
Оператор GROUP BY имеет следующий синтаксис:
SELECT ИМЕНА_СТОЛБЦОВ FROM ИМЯ_ТАБЛИЦЫ [ WHERE УСЛОВИЕ] GROUP BY ИМЕНА_СТОЛБЦОВ
Группировка по одному столбцу без агрегатных функций
Если в результате запроса требуется вывести один столбец и по этому же столбцу производится группировка, то оператор GROUP BY просто выбирает уникальные значения и убирает дубликаты, то есть выполняет те же задачи, что и ключевое слово DISTINCT.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .
Скрипт для создания базы данных библиотеки, её таблиц и заполения таблиц данными — в файле по этой ссылке .
В примерах работаем с базой данных библиотеки и ее таблицей «Книга в пользовании» (Bookinuse). Отметим, что оператор GROUP BY ведёт себя несколько по-разному в MySQL и в MS SQL Server. Эти различия будут показаны на примерах.
| Author | Title | Pubyear | Inv_No | Customer_ID |
| Толстой | Война и мир | 2005 | 28 | 65 |
| Чехов | Вишневый сад | 2000 | 17 | 31 |
| Чехов | Избранные рассказы | 2011 | 19 | 120 |
| Чехов | Вишневый сад | 1991 | 5 | 65 |
| Ильф и Петров | Двенадцать стульев | 1985 | 3 | 31 |
| Маяковский | Поэмы | 1983 | 2 | 120 |
| Пастернак | Доктор Живаго | 2006 | 69 | 120 |
| Толстой | Воскресенье | 2006 | 77 | 47 |
| Толстой | Анна Каренина | 1989 | 7 | 205 |
| Пушкин | Капитанская дочка | 2004 | 25 | 47 |
| Гоголь | Пьесы | 2007 | 81 | 47 |
| Чехов | Избранные рассказы | 1987 | 4 | 205 |
| Пушкин | Сочинения, т.1 | 1984 | 6 | 47 |
| Пастернак | Избранное | 2000 | 137 | 18 |
| Пушкин | Сочинения, т.2 | 1984 | 8 | 205 |
| NULL | Наука и жизнь 9 2018 | 2019 | 127 | 18 |
| Чехов | Ранние рассказы | 2001 | 171 | 31 |
Пример 1. Вывести авторов выданных книг, сгруппировав их. Пишем следующий запрос:
SELECT Author FROM BOOKINUSE GROUP BY Author
Этот запрос вернёт следующий результат:
| Author |
| NULL |
| Гоголь |
| Ильф и Петров |
| Маяковский |
| Пастернак |
| Пушкин |
| Толстой |
| Чехов |
Как видим, в таблице стало меньше строк, так как фамилии авторов остались каждая по одной.
В следующем примере увидим, что оператор GROUP BY не следует путать с оператором ORDER BY и поймём, чем эти операторы отличаются друг от друга.
Пример 2. Вывести авторов и названия выданных книг, сгруппировав по авторам. Пишем следующий запрос, который допустим в MySQL:
SELECT Author, Title FROM Bookinuse GROUP BY Author
Этот запрос вернёт следующий результат:
| Author | Title |
| NULL | Наука и жизнь 9 2018 |
| Гоголь | Пьесы |
| Ильф и Петров | Двенадцать стульев |
| Маяковский | Поэмы |
| Пастернак | Доктор Живаго |
| Пушкин | Капитанская дочка |
| Толстой | Война и мир |
| Чехов | Вишнёвый сад |
Как видим, в таблице каждому автору соответствует лишь одна книга, причём та, которая в таблице BOOKINUSE является первой по порядку записей.
Если бы нам требовалось вывести все книги, причём авторы должны были бы следовать не «вразброс», а по порядку: сначала Гоголь и все его книги, затем другие авторы и все их книги, то мы применили бы не оператор GROUP BY, а оператор ORDER BY.
Группировка по нескольким столбцам без агрегатных функций
И всё же вывести все записи, соответствующие значению столбца, по которому происходит группировка, можно. Но в этом случае в результирующей таблице должен появиться ещё один столбец. Такой случай проиллюстирован в следующем примере.
Пример 3. Вывести авторов, названия выданных книг, ID пользователя и инвентарный номер выданной книги. Сгруппировать по авторам, ID пользователя и инвентарному номеру. На MySQL запрос будет следующим:
SELECT Author, Title, Customer_ID, Inv_no FROM Bookinuse GROUP BY Author, Customer_ID, Inv_no
Этот запрос вернёт следующий результат:
| Author | Title | Customer_ID | Inv_no |
| Гоголь | Пьесы | 47 | 81 |
| Ильф и Петров | Двенадцать стульев | 31 | 3 |
| Маяковский | Поэмы | 120 | 2 |
| Пастернак | Избранное | 18 | 137 |
| Пастернак | Доктор Живаго | 120 | 69 |
| Пушкин | Капитанская дочка | 47 | 25 |
| Пушкин | Сочинения, т.1 | 47 | 6 |
| Пушкин | Сочинения, т.2 | 205 | 8 |
| Толстой | Воскресенье | 47 | 77 |
| Толстой | Война и мир | 65 | 28 |
| Толстой | Анна Каренина | 205 | 7 |
| Чехов | Вишневый сад | 31 | 19 |
| Чехов | Ранние рассказы | 31 | 171 |
| Чехов | Вишневый сад | 65 | 5 |
| Чехов | Избранные рассказы | 120 | 19 |
| Чехов | Избранные рассказы | 205 | 4 |
Как видим, в результирующей таблице присутствуют все книги всех авторов, причём авторы следуют по порядку, как если бы мы применили оператор ORDER BY. Кроме того, видно, что записи сгруппированы и по второму указанному столбцу — Customer_ID. Так, у автора Пушкина сначала перечисляются книги, выданные пользователю с Customer_ID 47, а затем — 205. У автора Чехова сначала перечисляются книги, выданные пользователю с Customer_ID 31, а затем — с другими номерами. Третий столбец, по которому происходит группировка — Inv_no — добавлен только для того, чтобы в результирующей таблице выводились все строки, соответствующие значениям ранее перечисленных столбцов для группировки, а не только уникальные.
По-другому ведёт себя оператор GROUP BY в MS SQL Server и в случае этого запроса.
- Группировка по одному столбцу без агрегатных функций
- Группировка по нескольким столбцам без агрегатных функций
- Группировка с агрегатными функциями
- Особенности применения группировки в MS SQL Server