sự khác biệt giữa GROUP BY và ORDER BY trong sql


119

Khi nào bạn sử dụng cái nào nói chung? Ví dụ rất được khuyến khích!

Tôi đang đề cập đến MySql, nhưng không thể tưởng tượng khái niệm này lại khác trên một DBMS khác

Câu trả lời:


79

ORDER BY thay đổi thứ tự các mặt hàng được trả lại.

GROUP BY sẽ tổng hợp các bản ghi theo các cột được chỉ định cho phép bạn thực hiện các chức năng tổng hợp trên các cột không được nhóm (chẳng hạn như SUM, COUNT, AVG, v.v.).


130
Tuyên bố này hầu như không có ý nghĩa nếu không có một ví dụ kèm theo.
JohnMerlino

2
tôi nghĩ rằng ví dụ thứ hai trên trang trong liên kết là đủ để hiểu sự khác biệt hướng
dẫnspoint.com/sql/sql

Bạn có thể vui lòng cung cấp một ví dụ?
Rice

249

ORDER BY thay đổi thứ tự các mặt hàng được trả lại.

GROUP BY sẽ tổng hợp các bản ghi theo các cột được chỉ định cho phép bạn thực hiện các chức năng tổng hợp trên các cột không được nhóm (chẳng hạn như SUM, COUNT, AVG, v.v.).

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
Điều gì sẽ xảy ra nếu bảng có agecột, với Peters có độ tuổi khác nhau và truy vấn là CHỌN TÊN, TUỔI TỪ NHÓM BẢNG THEO TÊN?
Varun

1
Bạn không thể trả về các cột không có trong nhóm của mình bằng hoặc có một phương thức. Vì vậy, bạn sẽ cần thêm độ tuổi vào nhóm theo hoặc làm một cái gì đó như Max (Tuổi).
RiddlerDev

78

ORDER BY: sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần.

Xem xét bảng KHÁCH HÀNG :

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

Sau đây là một ví dụ, sẽ sắp xếp kết quả theo thứ tự tăng dần theo NAME:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| 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: sắp xếp dữ liệu giống hệt nhau thành các nhóm.

Bây giờ, bảng CUSTOMERS có các bản ghi sau với tên trùng lặp:

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

nếu bạn muốn nhóm các tên giống nhau thành một tên, thì truy vấn GROUP BY sẽ như sau:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Điều này sẽ tạo ra kết quả sau: (đối với các tên giống nhau, nó sẽ chọn tên cuối cùng và cuối cùng sắp xếp cột theo thứ tự tăng dần)

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

như bạn đã suy luận rằng nó không có ích gì nếu không có các hàm SQL như sum, avg, v.v.

vì vậy hãy xem qua định nghĩa này để hiểu cách sử dụng thích hợp GROUP BY:

Mệnh đề GROUP BY hoạt động trên các hàng được truy vấn trả về bằng cách tóm tắt các hàng giống hệt nhau thành một nhóm duy nhất / riêng biệt và trả về một hàng duy nhất có tóm tắt cho từng nhóm, bằng cách sử dụng hàm Tổng hợp thích hợp trong danh sách CHỌN, như COUNT (), SUM (), MIN (), MAX (), AVG (), v.v.

Bây giờ, nếu bạn muốn biết tổng số tiền lương của mỗi khách hàng (tên), thì truy vấn GROUP BY sẽ như sau:

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

Điều này sẽ tạo ra kết quả sau: (tổng số lương của các tên giống nhau và sắp xếp cột TÊN sau khi loại bỏ các tên giống nhau)

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

25

Sự khác biệt là chính xác những gì tên ngụ ý: một nhóm thực hiện một hoạt động nhóm và một thứ tự theo các loại.

Nếu bạn làm vậy SELECT * FROM Customers ORDER BY Namethì bạn sẽ nhận được danh sách kết quả được sắp xếp theo tên khách hàng.

Nếu bạn có, SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActivebạn nhận được một số lượng khách hàng hoạt động và không hoạt động. Nhóm theo cách tổng hợp các kết quả dựa trên trường bạn đã chỉ định.


3
Hơn nữa: nếu bạn NHÓM, kết quả không nhất thiết phải được sắp xếp; mặc dù trong nhiều trường hợp, chúng có thể xuất hiện theo thứ tự trực quan, điều đó không được đảm bảo bởi điều khoản GROUP. Nếu bạn muốn các nhóm của mình được sắp xếp, hãy luôn sử dụng ORDER BY rõ ràng sau GROUP BY.
Dave Costa

16

Chúng có ý nghĩa hoàn toàn khác nhau và không thực sự liên quan gì cả.

ORDER BY cho phép bạn sắp xếp tập hợp kết quả theo các tiêu chí khác nhau, chẳng hạn như sắp xếp đầu tiên theo tên từ az, sau đó sắp xếp theo giá cao nhất đến thấp nhất.

(ĐẶT HÀNG THEO tên, giá MÔ TẢ)

GROUP BY cho phép bạn lấy bộ kết quả của mình, nhóm nó thành các nhóm logic và sau đó chạy các truy vấn tổng hợp trên các nhóm đó. Ví dụ, bạn có thể chọn tất cả nhân viên, nhóm họ theo vị trí nơi làm việc và tính toán mức lương trung bình của tất cả nhân viên của từng vị trí nơi làm việc.


8

Đơn giản, sắp ORDER BYxếp dữ liệu và GROUP BYnhóm hoặc kết hợp dữ liệu.

ORDER BY sắp xếp bộ kết quả theo trường được đề cập, theo mặc định theo thứ tự tăng dần.

Giả sử bạn đang kích hoạt một truy vấn ORDER BY (student_roll_number), nó sẽ hiển thị cho bạn kết quả theo thứ tự tăng dần của số cuộn của học sinh. Ở đây, student_roll_numbermục nhập có thể xảy ra nhiều lần.

Trong GROUP BYtrường hợp, chúng tôi sử dụng điều này với các hàm tổng hợp và nó nhóm dữ liệu theo hàm tổng hợp và chúng tôi nhận được kết quả. Ở đây, nếu truy vấn của chúng tôi có SUM (marks)cùng với GROUP BY (student_first_name)nó sẽ hiển thị tổng điểm của các sinh viên thuộc mỗi nhóm (trong đó tất cả các thành viên của một nhóm sẽ có cùng tên).


4

GROUP BY được sử dụng để nhóm các hàng trong một vùng chọn, thường là khi tổng hợp các hàng (ví dụ: tính tổng, trung bình, v.v. cho một tập hợp các hàng có cùng giá trị cho một số trường).

ORDER BY được sử dụng để sắp xếp các hàng xuất phát từ một câu lệnh select.



1

ORDER BYhiển thị một trường theo thứ tự tăng dần hoặc giảm dần. Trong khi GROUP BYhiển thị các tên trường giống nhau, id của vv trong chỉ một đầu ra.


4
Câu trả lời này không cung cấp thông tin bổ sung mà câu trả lời được chấp nhận hoặc bất kỳ câu trả lời nào khác được đưa ra, chưa nêu rõ.
newfurniturey 26/10/12

1
  1. GROUP BY sẽ tổng hợp các bản ghi theo cột được chỉ định cho phép bạn thực hiện các chức năng tổng hợp trên các cột không được nhóm (chẳng hạn như SUM, COUNT, AVG, v.v.). ORDER BY thay đổi thứ tự các mặt hàng được trả lại.
  2. Nếu bạn CHỌN Không hoạt động, COUNT (*) TỪ NHÓM Khách hàng BẰNG Hoạt động, bạn sẽ nhận được số lượng khách hàng đang hoạt động và không hoạt động. Nhóm theo cách tổng hợp các kết quả dựa trên trường bạn đã chỉ định. Nếu bạn CHỌN * TỪ KHÁCH HÀNG ĐẶT HÀNG THEO Tên thì bạn sẽ nhận được danh sách kết quả được sắp xếp theo tên của khách hàng.
  3. Nếu bạn NHÓM, kết quả không nhất thiết phải được sắp xếp; mặc dù trong nhiều trường hợp, chúng có thể xuất hiện theo thứ tự trực quan, điều đó không được đảm bảo bởi điều khoản GROUP. Nếu bạn muốn các nhóm của mình được sắp xếp, hãy luôn sử dụng ORDER BY rõ ràng sau GROUP BY.
  4. Dữ liệu được nhóm không thể được lọc theo mệnh đề WHERE. Dữ liệu đơn hàng có thể được lọc theo mệnh đề WHERE.

0

Cần lưu ý rằng GROUP BYkhông phải lúc nào cũng cần thiết vì (ít nhất là trong PostgreSQL và có thể trong các biến thể SQL khác) bạn có thể sử dụng ORDER BYvới một danh sách bạn vẫn có thể sử dụng ASChoặc DESC trên mỗi cột ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.