в чем разница между GROUP BY и ORDER BY в sql


119

Когда вы вообще что используете? Примеры очень приветствуются!

Я имею в виду MySql, но не могу представить, что концепция отличается от другой СУБД.

Ответы:


79

ORDER BY изменяет порядок возврата товаров.

GROUP BY будет агрегировать записи по указанным столбцам, что позволяет выполнять функции агрегирования для несгруппированных столбцов (таких как SUM, COUNT, AVG и т. Д.).


130
Это утверждение практически не имеет смысла без сопровождающего примера.
— JohnMerlino

2
Я думаю, что второго примера на странице по ссылке достаточно, чтобы понять разницу: tutorialspoint.com/sql/sql-group-by.htm
— nishantbhardwaj2002,

Не могли бы вы привести пример?
— Райс

249

ORDER BY изменяет порядок возврата товаров.

GROUP BY будет агрегировать записи по указанным столбцам, что позволяет выполнять функции агрегирования для несгруппированных столбцов (таких как SUM, COUNT, AVG и т. Д.).

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter

2
Что, если в таблице есть ageстолбец, в котором Петерс имеет разный возраст, а запрос - ВЫБРАТЬ ИМЯ, ВОЗРАСТ ИЗ ТАБЛИЦЫ ГРУППА ПО ИМЕНИ?
— Варун

1
Вы не можете вернуть столбцы, которые не входят в вашу группу, или не имеют метода. Таким образом, вам нужно будет либо добавить возраст в группу по, либо сделать что-то вроде Max (Age).
— RiddlerDev

78

ORDER BY: отсортируйте данные в порядке возрастания или убывания.

Рассмотрим таблицу CUSTOMERS :

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример сортировки результатов в порядке возрастания по ИМЕНИ:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Это даст следующий результат:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GROUP BY: объедините идентичные данные в группы.

Теперь в таблице CUSTOMERS есть следующие записи с повторяющимися именами:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

если вы хотите сгруппировать одинаковые имена в одно имя, запрос GROUP BY будет следующим:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Это даст следующий результат: (для одинаковых имен он выбирает последнее и, наконец, сортирует столбец в порядке возрастания)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

как вы сделали вывод, что он бесполезен без функций SQL, таких как sum, avg и т. д.

поэтому просмотрите это определение, чтобы понять правильное использование GROUP BY:

Предложение GROUP BY работает со строками, возвращаемыми запросом, суммируя идентичные строки в одну / отдельную группу и возвращает одну строку со сводкой для каждой группы, используя соответствующую функцию Aggregate в списке SELECT, например COUNT (), SUM (), MIN (), MAX (), AVG () и т. Д.

Теперь, если вы хотите узнать общую сумму зарплаты каждого клиента (имя), запрос GROUP BY будет следующим:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

Это даст следующий результат: (сумма зарплат идентичных имен и сортировка столбца ИМЯ после удаления идентичных имен)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

25

Разница в том, что подразумевает название: группа по выполняет операцию группировки и упорядочивает по сортировке.

Если вы это сделаете, SELECT * FROM Customers ORDER BY Nameвы получите список результатов, отсортированный по именам клиентов.

Если вы это сделаете, SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActiveвы получите количество активных и неактивных клиентов. Группа по агрегировала результаты на основе указанного вами поля.


3
Более того: если вы ГРУППИРУЕТЕ, результаты не обязательно отсортированы; хотя во многих случаях они могут появляться в интуитивно понятном порядке, это не гарантируется предложением GROUP. Если вы хотите, чтобы ваши группы были отсортированы, всегда используйте явное ORDER BY после GROUP BY.
— Дэйв Коста,

16

Они имеют совершенно разное значение и вообще не связаны между собой.

ORDER BY позволяет вам отсортировать набор результатов по различным критериям, таким как сначала отсортировать по имени от z, а затем отсортировать по цене от наибольшей к наименьшей.

(ЗАКАЗАТЬ ПО НАЗВАНИЮ, ПО УБЫТКУ)

GROUP BY позволяет вам взять ваш набор результатов, сгруппировать его в логические группы, а затем выполнить агрегированные запросы по этим группам. Вы можете, например, выбрать всех сотрудников, сгруппировать их по месту работы и рассчитать среднюю зарплату всех сотрудников на каждом рабочем месте.


8

Простой, ORDER BYупорядочивает данные и GROUP BYгруппирует или объединяет данные.

ORDER BY упорядочивает набор результатов в соответствии с указанным полем по умолчанию в порядке возрастания.

Предположим, вы запускаете запрос, поскольку ORDER BY (student_roll_number)он покажет вам результат в порядке возрастания номеров списка учеников. Здесь student_roll_numberзапись может происходить более одного раза.

В GROUP BYслучае, если мы используем это с агрегатными функциями, и он группирует данные согласно агрегатной функции, и мы получаем результат. Здесь, если наш запрос имеет SUM (marks)вместе с GROUP BY (student_first_name)ним, будет отображаться сумма оценок учащихся, принадлежащих к каждой группе (где все члены группы будут иметь одинаковое имя).


4

GROUP BY используется для группировки строк в выборке, обычно при агрегировании строк (например, вычислении итогов, средних значений и т. Д. Для набора строк с одинаковыми значениями для некоторых полей).

ORDER BY используется для упорядочивания строк, полученных в результате оператора выбора.


4

Есть несколько хороших примеров. Точно так же, как добавить свой собственный из веб-таблицы, который дает хорошие четкие примеры, а также позволяет вам выполнять свой собственный SQL.

Порядок SQL по

Группа SQL по


1

ORDER BYпоказывает поле в порядке возрастания или убывания. Хотя GROUP BYпоказывает одинаковые имена полей, идентификаторы и т. Д. Только в одном выводе.


4
Этот ответ не содержит дополнительной информации, о которой еще не говорится в принятом или любом другом ответе.
— newfurniturey

1
  1. GROUP BY будет агрегировать записи по указанному столбцу, что позволяет выполнять функции агрегирования для несгруппированных столбцов (таких как SUM, COUNT, AVG и т. Д.). ORDER BY изменяет порядок возврата товаров.
  2. Если вы выполните SELECT IsActive, COUNT (*) FROM Customers GROUP BY IsActive, вы получите количество активных и неактивных клиентов. Группа по агрегировала результаты на основе указанного вами поля. Если вы сделаете SELECT * FROM Customers ORDER BY Name, вы получите список результатов, отсортированный по имени клиента.
  3. Если вы ГРУППИРУЕТЕ, результаты не обязательно отсортированы; хотя во многих случаях они могут появляться в интуитивно понятном порядке, это не гарантируется предложением GROUP. Если вы хотите, чтобы ваши группы были отсортированы, всегда используйте явно ORDER BY после GROUP BY.
  4. Сгруппированные данные нельзя фильтровать с помощью предложения WHERE. Данные заказа можно фильтровать с помощью предложения WHERE.

0

Следует отметить, что GROUP BYэто не всегда необходимо, поскольку (по крайней мере, в PostgreSQL и, вероятно, в других вариантах SQL) вы можете использовать ORDER BYсписок, и вы все равно можете использовать ASCили для DESC каждого столбца ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.