it-swarm.com.ru

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

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

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

104
vehomzzz

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

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

74
CMerat

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
227
RiddlerDev

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

РассмотримКЛИЕНТЫтаблица:

+----+----------+-----+-----------+----------+
| 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: упорядочить идентичные данные в группы.

ТеперьКЛИЕНТЫтаблица содержит следующие записи с повторяющимися именами:

+----+----------+-----+-----------+----------+
| 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 |
+---------+-------------+
61
JerryGoyal

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

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

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

22
Max Schmeling

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

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

(ЗАКАЗАТЬ ПО ФИО, цена DESC)

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

14
PatrikAkerstrand

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

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

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

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

8
Swapnil Chincholkar

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

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

4
Cătălin Pitiș

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

SQL Упорядочить по

SQL Group By

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

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

1
Im_khan

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

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
0
John