яка різниця між GROUP BY і ORDER BY у sql


119

Коли ви використовуєте який взагалі? Приклади настійно заохочуються!

Я маю на увазі MySql, але не можу уявити, що концепція відрізняється від інших СУБД

Відповіді:


79

ЗАМОВИТИ ЗА зміною порядку повернення предметів.

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


130
Це твердження практично не має сенсу без супровідного прикладу.
JohnMerlino

2
я думаю, що другого прикладу на сторінці у посиланні достатньо, щоб зрозуміти різницю tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002

Чи можете ви надати приклад?
Рис

249

ЗАМОВИТИ ЗА зміною порядку повернення предметів.

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
Ви не можете повернути стовпці, які не є у вашій групі, або не мають методу. Тому вам або потрібно буде додати вік до групи, або зробити щось на кшталт Макс (Вік).
RiddlerDev

78

ЗАМОВИТИ ЗА: сортування даних у порядку зростання або зменшення.

Розглянемо таблицю Клієнтів :

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

Нижче наводиться приклад, який сортуватиме результат у порядку зростання за NAME:

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

ГРУПУВАТИ ЗА: упорядкувати однакові дані по групах

Тепер у таблиці КЛІЄНТІ є такі записи із повторюваними іменами:

+----+----------+-----+-----------+----------+
| 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 після видалення однакових імен)

+---------+-------------+
| 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. Якщо ви хочете, щоб ваші групи були відсортовані, завжди використовуйте ЗАЯВКУ з чіткістю за групою BY.
Дейв Коста

16

Вони мають зовсім інше значення і насправді взагалі не пов'язані між собою.

СОРТУВАТИ ЗА дозволяє сортувати набір результатів за різними критеріями, наприклад спочатку сортувати за назвою від az, а потім сортувати за ціною, найвищою до найнижчої.

(ЗАМОВЛЕННЯ ПО ПІБ, ціна DESC)

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 використовується для впорядкування рядків, що випливають із оператора select.



1

ORDER BYпоказує поле у ​​порядку зростання чи спадання. Хоча GROUP BYпоказує однакові назви полів, ідентифікаторів тощо лише в одному висновку.


4
Ця відповідь не надає додаткової інформації про те, що прийнята відповідь чи будь-яка інша відповідь не вказана.
newfurniturey

1
  1. GROUP BY буде агрегувати записи за вказаним стовпцем, що дозволяє виконувати функції агрегації на негрупованих стовпцях (таких як SUM, COUNT, AVG тощо). ЗАМОВИТИ ЗА зміною порядку повернення предметів.
  2. Якщо ви вибрали SELECT IsActive, COUNT (*) ВІД Клієнтів за групою IsActive, ви отримаєте кількість активних та неактивних клієнтів. Група шляхом агрегування результатів на основі вказаного поля. Якщо ви вибрали * ІЗ Клієнтів ЗАМОВИТИ ІМЯ, то ви отримаєте список результатів, відсортований за іменем замовника.
  3. Якщо ви групуєте, результати не обов'язково сортуються; хоча у багатьох випадках вони можуть виходити в інтуїтивному порядку, це не гарантується пунктом GROUP. Якщо ви хочете, щоб ваші групи були відсортовані, завжди використовуйте явно ЗАМОВЛЕННЯ ЗА ГРУППУ ПО.
  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.