Vấn đề:
Bạn đã tổng hợp dữ liệu thành các nhóm, nhưng bạn muốn sắp xếp các bản ghi theo thứ tự giảm dần theo số phần tử trong nhóm.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng tên là user
với dữ liệu trong các cột sau:id
, first_name
, last_name
và country
.
id | first_name | last_name | quốc gia |
---|---|---|---|
1 | Lisa | Williams | Anh |
2 | Gary | Anders | Ba Lan |
3 | Tom | Williams | Ba Lan |
4 | Michael | Màu nâu | Pháp |
5 | Susan | Smith | Hoa Kỳ |
6 | Anne | Jones | Hoa Kỳ |
7 | Ellie | Miller | Ba Lan |
Hãy tạo một báo cáo về người dùng của chúng tôi. Chúng tôi sẽ nhóm các kết quả theo country
và đếm số lượng người dùng từ mỗi quốc gia. Nhưng chúng tôi cũng sẽ sắp xếp các nhóm theo thứ tự giảm dần theo số lượng người dùng. Bằng cách đó, các quốc gia có số lượng người dùng lớn nhất sẽ xuất hiện ở trên cùng.
Giải pháp:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
country | số lượng (id) |
---|---|
Ba Lan | 3 |
Hoa Kỳ | 2 |
Anh | 1 |
Pháp | 1 |
Thảo luận:
Để sắp xếp các bản ghi đã chọn theo số phần tử trong mỗi nhóm, bạn sử dụng ORDER BY
mệnh đề.
Bước đầu tiên là sử dụng GROUP BY
mệnh đề để tạo các nhóm (trong ví dụ của chúng tôi, chúng tôi nhóm theo country
cột). Sau đó, trong mệnh đề ORDER BY, bạn sử dụng hàm tổng hợp COUNT, hàm này đếm số giá trị trong cột bạn chọn; trong ví dụ của chúng tôi, chúng tôi đếm các ID riêng biệt bằng COUNT(id)
. Điều này có hiệu quả đếm số phần tử trong mỗi nhóm. ORDER BY
mệnh đề sau đó sắp xếp các nhóm theo phép tính đó.
Như thường lệ, bạn có thể sử dụng cả thứ tự tăng dần hoặc giảm dần với ORDER BY
. Nếu bạn muốn thứ tự giảm dần (như trong ví dụ này), bạn sử dụng DESC
từ khóa. Thứ tự tăng dần không cần bất kỳ từ khóa nào vì đó là từ khóa mặc định, nhưng bạn có thể sử dụng ASC
từ khóa nếu bạn muốn rõ ràng. Đây là cùng một ví dụ nhưng với các kết quả được sắp xếp theo thứ tự tăng dần:
Giải pháp:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Đây là kết quả:
country | số lượng (id) |
---|---|
Anh | 1 |
Pháp | 1 |
Hoa Kỳ | 2 |
Ba Lan | 3 |