Câu trả lời:
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.).
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
age
cộ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?
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 |
+---------+-------------+
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 Name
thì 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 IsActive
bạ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.
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.
Đơn giản, sắp ORDER BY
xếp dữ liệu và GROUP BY
nhó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_number
mục nhập có thể xảy ra nhiều lần.
Trong GROUP BY
trườ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).
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.
Một số ví dụ điển hình ở đó. Cũng giống như thêm của tôi từ trang webcheatsheet đưa ra các ví dụ rõ ràng tốt, cũng như cho phép bạn thực thi SQL của riêng mình.
ORDER BY
hiển thị một trường theo thứ tự tăng dần hoặc giảm dần. Trong khi GROUP BY
hiển thị các tên trường giống nhau, id của vv trong chỉ một đầu ra.
Cần lưu ý rằng GROUP BY
khô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 BY
với một danh sách và bạn vẫn có thể sử dụng ASC
hoặ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;