apa perbedaan antara GROUP BY dan ORDER BY di sql

119

Kapan Anda menggunakan yang mana secara umum? Teladan sangat dianjurkan!

Saya merujuk begitu MySql, tetapi tidak bisa membayangkan konsepnya berbeda di DBMS lain

kendaraan
sumber

Jawaban:

79

ORDER BY mengubah urutan pengembalian item.

GROUP BY akan menggabungkan record berdasarkan kolom tertentu yang memungkinkan Anda menjalankan fungsi agregasi pada kolom yang tidak dikelompokkan (seperti SUM, COUNT, AVG, dll).

CMerat
sumber
130
Pernyataan ini hampir tidak masuk akal tanpa contoh yang menyertainya.
JohnMerlino
2
Saya pikir contoh kedua pada halaman di tautan cukup untuk memahami perbedaan tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002
Bisakah Anda memberikan contoh?
Beras
249

ORDER BY mengubah urutan pengembalian item.

GROUP BY akan menggabungkan record berdasarkan kolom tertentu yang memungkinkan Anda menjalankan fungsi agregasi pada kolom yang tidak dikelompokkan (seperti SUM, COUNT, AVG, dll).

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
RiddlerDev
sumber
2
Bagaimana jika tabel memiliki agekolom, dengan Peters memiliki usia yang berbeda dan querynya adalah PILIH NAMA, USIA DARI KELOMPOK TABEL BERDASARKAN NAMA?
Varun
1
Anda tidak dapat mengembalikan kolom yang tidak ada di grup Anda dengan, atau memiliki metode. Jadi, Anda perlu menambahkan usia untuk dikelompokkan, atau lakukan sesuatu seperti Max (Usia).
RiddlerDev
78

ORDER BY: mengurutkan data dalam urutan naik atau turun.

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

Berikut ini adalah contoh yang akan mengurutkan hasil dalam urutan menaik menurut NAME:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Ini akan menghasilkan hasil sebagai berikut:

+----+----------+-----+-----------+----------+
| 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: menyusun data yang identik ke dalam kelompok.

Sekarang, tabel CUSTOMERS memiliki record berikut dengan nama duplikat:

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

Jika Anda ingin mengelompokkan nama yang identik menjadi satu nama, maka kueri GROUP BY adalah sebagai berikut:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Ini akan menghasilkan hasil sebagai berikut: (untuk nama yang identik ia akan memilih yang terakhir dan akhirnya mengurutkan kolom dalam urutan menaik)

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

seperti yang Anda simpulkan bahwa itu tidak ada gunanya tanpa fungsi SQL seperti sum, avg dll ..

jadi pelajari definisi ini untuk memahami penggunaan yang tepat dari GROUP BY:

Klausa GROUP BY bekerja pada baris yang dikembalikan oleh kueri dengan meringkas baris yang identik menjadi satu / grup berbeda dan mengembalikan satu baris dengan ringkasan untuk setiap grup, dengan menggunakan fungsi Agregat yang sesuai dalam daftar PILIH, seperti COUNT (), SUM (), MIN (), MAX (), AVG (), dll.

Sekarang, jika Anda ingin mengetahui jumlah total gaji pada setiap pelanggan (nama), maka query GROUP BY adalah sebagai berikut:

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

Ini akan menghasilkan hasil sebagai berikut: (jumlah gaji dari nama yang identik dan urutkan kolom NAMA setelah menghapus nama yang identik)

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

Perbedaannya persis seperti namanya: grup dengan melakukan operasi pengelompokan, dan urutan berdasarkan jenis.

Jika kamu melakukan SELECT * FROM Customers ORDER BY Name maka Anda mendapatkan daftar hasil yang diurutkan berdasarkan nama pelanggan.

Jika Anda melakukannya, SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActiveAnda mendapatkan jumlah pelanggan aktif dan tidak aktif. Kelompokkan dengan mengumpulkan hasil berdasarkan bidang yang Anda tentukan.

Max Schmeling
sumber
3
Selain itu: jika Anda MENGELOMPOKKAN, hasilnya belum tentu diurutkan; meskipun dalam banyak kasus mereka mungkin keluar dalam urutan intuitif, itu tidak dijamin oleh klausa GROUP. Jika Anda ingin grup Anda diurutkan, selalu gunakan eksplisit ORDER BY setelah GROUP BY.
Dave Costa
16

Mereka memiliki arti yang sangat berbeda dan tidak benar-benar berhubungan sama sekali.

DIPESAN OLEH memungkinkan Anda mengurutkan hasil menurut kriteria yang berbeda, seperti urutan pertama menurut nama dari az, lalu mengurutkan menurut harga tertinggi hingga terendah.

(ORDER BY nama, DESC harga)

GROUP BY memungkinkan Anda untuk mengambil set hasil Anda, mengelompokkannya ke dalam grup logis dan kemudian menjalankan kueri agregat pada grup tersebut. Misalnya, Anda dapat memilih semua karyawan, mengelompokkan mereka berdasarkan lokasi tempat kerja mereka dan menghitung gaji rata-rata semua karyawan di setiap lokasi kerja.

PatrikAkerstrand
sumber
8

Sederhana, ORDER BYmengurutkan data dan GROUP BYmengelompokkan, atau menggabungkan data.

ORDER BY mengurutkan hasil yang ditetapkan sesuai bidang yang disebutkan, secara default dalam urutan menaik.

Misalkan Anda menjalankan kueri karena ORDER BY (student_roll_number), ini akan menunjukkan kepada Anda hasil dalam urutan menaik nomor gulungan siswa. Sini,student_roll_number entri mungkin terjadi lebih dari sekali.

Dalam GROUP BYkasus ini, kami menggunakan ini dengan fungsi agregat, dan ini mengelompokkan data sesuai fungsi agregat, dan kami mendapatkan hasilnya. Di sini, jika kueri kami memiliki SUM (marks)bersama, GROUP BY (student_first_name)itu akan menunjukkan jumlah nilai siswa yang termasuk dalam setiap grup (di mana semua anggota grup akan memiliki nama depan yang sama).

Swapnil Chincholkar
sumber
4

GROUP BY digunakan untuk mengelompokkan baris dalam pemilihan, biasanya saat menggabungkan baris (misalnya menghitung total, rata-rata, dll. Untuk satu set baris dengan nilai yang sama untuk beberapa bidang).

ORDER BY digunakan untuk mengurutkan baris yang dihasilkan dari pernyataan pilih.

Cătălin Pitiș
sumber
4

Beberapa contoh bagus di sana. Sama seperti menambahkan milik saya dari webcheatsheet yang memberikan contoh jelas yang bagus, serta membiarkan Anda menjalankan SQL Anda sendiri.

SQL Order By

SQL Group Oleh

kevchadders
sumber
1

ORDER BYmenunjukkan bidang dalam urutan menaik atau menurun. Sementara GROUP BYmenunjukkan nama bidang yang sama, id dll hanya dalam satu keluaran.

Im_khan
sumber
4
Jawaban ini tidak memberikan informasi tambahan yang belum disebutkan oleh jawaban yang diterima, atau jawaban lain yang diberikan.
newfurniturey
1
  1. GROUP BY akan menggabungkan record berdasarkan kolom tertentu yang memungkinkan Anda melakukan fungsi agregasi pada kolom yang tidak dikelompokkan (seperti SUM, COUNT, AVG, dll.). ORDER BY mengubah urutan pengembalian item.
  2. Jika Anda melakukan SELECT IsActive, COUNT (*) FROM Customers GROUP BY IsActive Anda mendapatkan jumlah pelanggan aktif dan tidak aktif. Kelompokkan dengan mengumpulkan hasil berdasarkan bidang yang Anda tentukan. Jika Anda melakukan SELECT * FROM Customers ORDER BY Name maka Anda akan mendapatkan daftar hasil yang diurutkan berdasarkan nama pelanggan.
  3. Jika Anda MENGELOMPOKKAN, hasilnya belum tentu diurutkan; meskipun dalam banyak kasus mereka mungkin keluar dalam urutan intuitif, itu tidak dijamin oleh klausa GROUP. Jika Anda ingin grup Anda diurutkan, selalu gunakan ORDER BY secara eksplisit setelah GROUP BY.
  4. Data yang dikelompokkan tidak dapat disaring oleh klausa WHERE. Data pesanan dapat disaring dengan klausa WHERE.
Khadijah
sumber
0

Perlu dicatat bahwa GROUP BYtidak selalu diperlukan karena (setidaknya di PostgreSQL, dan kemungkinan dalam varian SQL lainnya) Anda dapat menggunakan ORDER BYdaftar dan Anda masih dapat menggunakan ASCatau DESC per kolom ...

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