jaka jest różnica między GROUP BY i ORDER BY w sql


119

Kiedy generalnie używasz których? Przykłady są bardzo mile widziane!

Odnoszę się więc do MySql, ale nie mogę sobie wyobrazić innej koncepcji na innym DBMS

Odpowiedzi:


79

ORDER BY zmienia kolejność zwracanych produktów.

GROUP BY agreguje rekordy według określonych kolumn, co umożliwia wykonywanie funkcji agregacji na kolumnach niezgrupowanych (takich jak SUMA, LICZNIK, ŚREDNIA itp.).


130
To stwierdzenie nie ma praktycznie sensu bez towarzyszącego mu przykładu.
JohnMerlino

2
Myślę, że drugi przykład na stronie w linku jest wystarczający, aby zrozumieć różnicę tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002

Czy możesz podać przykład?
Rice

249

ORDER BY zmienia kolejność zwracanych produktów.

GROUP BY agreguje rekordy według określonych kolumn, co umożliwia wykonywanie funkcji agregacji na kolumnach niezgrupowanych (takich jak SUMA, LICZNIK, ŚREDNIA itp.).

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
Co się stanie, jeśli tabela ma agekolumnę z Petersem w różnym wieku i zapytaniem SELECT NAME, AGE FROM TABLE GROUP BY NAME?
Varun

1
Nie możesz zwrócić kolumn, które nie znajdują się w Twojej grupie, ani nie mają metody. Musisz więc albo dodać wiek do grupowania według, albo zrobić coś w rodzaju Max (wiek).
RiddlerDev

78

ORDER BY: sortuj dane w kolejności rosnącej lub malejącej.

Rozważ tabelę 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 |
+----+----------+-----+-----------+----------+

Oto przykład, który posortowałby wynik w kolejności rosnącej według NAZWA:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Dałoby to następujący wynik:

+----+----------+-----+-----------+----------+
| 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: uporządkuj identyczne dane w grupy.

Teraz tabela CUSTOMERS zawiera następujące rekordy ze zduplikowanymi nazwami:

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

jeśli chcesz zgrupować identyczne nazwy w jedną nazwę, zapytanie GROUP BY wyglądałoby następująco:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Dałoby to następujący wynik: (dla identycznych nazw wybierze ostatnią i ostatecznie posortuje kolumnę w porządku rosnącym)

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

jak można wywnioskować, że nie jest to przydatne bez funkcji SQL, takich jak suma, średnia itp.

zapoznaj się więc z tą definicją, aby zrozumieć, jak należy używać funkcji GROUP BY:

Klauzula GROUP BY działa na wierszach zwracanych przez zapytanie, sumując identyczne wiersze w jedną / odrębną grupę i zwraca jeden wiersz z podsumowaniem dla każdej grupy, używając odpowiedniej funkcji agregującej z listy SELECT, takiej jak COUNT (), SUM (), MIN (), MAX (), AVG () itp.

Teraz, jeśli chcesz poznać całkowitą kwotę wynagrodzenia każdego klienta (imię i nazwisko), zapytanie GROUP BY wyglądałoby następująco:

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

Dałoby to następujący wynik: (suma wynagrodzeń o identycznych nazwiskach i sortowanie kolumny NAZWA po usunięciu identycznych nazwisk)

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

25

Różnica jest dokładnie tym, co sugeruje nazwa: grupa wykonuje operację grupowania i porządek według sortowania.

Jeśli to zrobisz SELECT * FROM Customers ORDER BY Name, otrzymasz listę wyników posortowaną według nazw klientów.

Jeśli tak SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive, otrzymasz liczbę aktywnych i nieaktywnych klientów. Grupa według zagregowanych wyników na podstawie określonego pola.


3
Ponadto: jeśli GRUPUJESZ, wyniki niekoniecznie są sortowane; chociaż w wielu przypadkach mogą wyjść w intuicyjnej kolejności, nie gwarantuje tego klauzula GROUP. Jeśli chcesz posortować swoje grupy, zawsze używaj wyraźnego ORDER BY po GROUP BY.
Dave Costa

16

Mają zupełnie inne znaczenie i wcale nie są ze sobą powiązane.

ORDER BY umożliwia sortowanie zestawu wyników według różnych kryteriów, takich jak najpierw sortowanie według nazwy od z, a następnie sortowanie według ceny od najwyższej do najniższej.

(ZAMÓW WEDŁUG nazwy, cena DESC)

GROUP BY umożliwia pobranie zestawu wyników, pogrupowanie go w logiczne grupy, a następnie uruchomienie zagregowanych zapytań dotyczących tych grup. Można na przykład wybrać wszystkich pracowników, pogrupować ich według lokalizacji miejsca pracy i obliczyć średnie wynagrodzenie wszystkich pracowników w każdym miejscu pracy.


8

Proste, ORDER BYporządkuje dane i GROUP BYgrupy lub łączy dane.

ORDER BY porządkuje zestaw wyników zgodnie ze wspomnianym polem, domyślnie w kolejności rosnącej.

Załóżmy, że uruchamiasz zapytanie ORDER BY (student_roll_number), ponieważ pokaże ono wynik w rosnącej kolejności numerów rolek uczniów. Tutaj student_roll_numberwpis może nastąpić więcej niż raz.

W GROUP BYprzypadku, gdy używamy tego z funkcjami agregującymi i grupuje dane zgodnie z funkcją agregującą, a otrzymujemy wynik. Tutaj, jeśli nasze zapytanie ma SUM (marks)razem ze sobą GROUP BY (student_first_name), pokaże sumę ocen uczniów należących do każdej grupy (gdzie wszyscy członkowie grupy będą mieli to samo imię).


4

GROUP BY służy do grupowania wierszy w selekcji, zwykle podczas agregowania wierszy (np. Obliczanie sum, średnich itp. Dla zestawu wierszy o tych samych wartościach dla niektórych pól).

ORDER BY służy do porządkowania wierszy wynikających z instrukcji select.



1

ORDER BYpokazuje pole w porządku rosnącym lub malejącym. Podczas gdy GROUP BYpokazuje te same nazwy pól, identyfikatory itp. W tylko jednym wyjściu.


4
Ta odpowiedź nie zawiera żadnych dodatkowych informacji, których nie ma w zaakceptowanej odpowiedzi lub jakiejkolwiek innej udzielonej odpowiedzi.
newfurniturey

1
  1. GROUP BY agreguje rekordy według określonej kolumny, co umożliwia wykonywanie funkcji agregacji na kolumnach niezgrupowanych (takich jak SUMA, COUNT, ŚREDNIA itp.). ORDER BY zmienia kolejność zwracanych produktów.
  2. Jeśli wybierzesz opcję SELECT IsActive, COUNT (*) FROM Customers GROUP BY IsActive, otrzymasz liczbę aktywnych i nieaktywnych klientów. Grupa według zagregowanych wyników na podstawie określonego pola. Jeśli wybierzesz opcję SELECT * FROM Klienci ORDER BY Name, otrzymasz listę wyników posortowaną według nazwy klienta.
  3. W przypadku GRUPOWANIA wyniki niekoniecznie są sortowane; chociaż w wielu przypadkach mogą wyjść w intuicyjnej kolejności, nie gwarantuje tego klauzula GROUP. Jeśli chcesz, aby Twoje grupy były posortowane, zawsze używaj jawnie ORDER BY po GROUP BY.
  4. Zgrupowanych danych nie można filtrować według klauzuli WHERE. Dane zamówienia można filtrować według klauzuli WHERE.

0

Należy zauważyć, że GROUP BYnie zawsze jest to konieczne, ponieważ (przynajmniej w PostgreSQL i prawdopodobnie w innych wariantach SQL) możesz używać ORDER BYz listą i nadal możesz używać ASClub DESC na kolumnę ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.