PostgreSQL - GROUP BY: Hướng dẫn chi tiết cho người mới bắt đầu

Xin chào các bạn tương lai của các nhà thuật toán cơ sở dữ liệu! ? Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của PostgreSQL, đặc biệt tập trung vào mệnh đề mạnh mẽ GROUP BY. Đừng lo lắng nếu bạn mới bắt đầu lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Nên, hãy lấy một tách cà phê ☕, và chúng ta cùng bắt đầu nào!

PostgreSQL - Group By

GROUP BY là gì?

Trước khi chúng ta đi sâu vào chi tiết, hãy hiểu GROUP BY thực sự làm gì. Hãy tưởng tượng bạn đang tổ chức một hộp lớn đầy những mảnh lego có màu sắc khác nhau. Mệnh đề GROUP BY giống như việc sắp xếp những mảnh lego theo màu - nó giúp chúng ta nhóm các dữ liệu tương tự lại với nhau. Trong ngôn ngữ cơ sở dữ liệu, nó cho phép chúng ta nhóm các hàng có cùng giá trị trong các cột được chỉ định.

Cú pháp

Cú pháp cơ bản của mệnh đề GROUP BY rất đơn giản:

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;

Đừng để điều này làm bạn hoảng hốt! Chúng ta sẽ phân tích nó từng phần:

  1. SELECT: Đây là nơi chúng ta chọn những gì chúng ta muốn thấy trong kết quả.
  2. column1, column2: Đây là các cột chúng ta muốn nhóm theo.
  3. aggregate_function(column3): Đây là một hàm (như SUM, AVG, COUNT) thực hiện một phép toán trên một tập hợp các giá trị.
  4. FROM table_name: Đây chỉ định bảng nào chúng ta đang truy vấn.
  5. GROUP BY column1, column2: Đây cho PostgreSQL biết các cột nào để sử dụng cho việc nhóm.

Ví dụ

Bây giờ, hãy cùng xem một số ví dụ thực tế để thấy GROUP BY trong hành động!

Ví dụ 1: Nhóm cơ bản

Hãy tưởng tượng chúng ta có một bảng叫做 sales với các cột product, category, và amount. Hãy nhóm doanh số bán hàng của chúng ta theo danh mục:

SELECT category, SUM(amount) as total_sales
FROM sales
GROUP BY category;

Truy vấn này sẽ hiển thị tổng doanh số bán hàng cho mỗi danh mục. Đây là những gì nó làm:

  1. Nó nhóm tất cả các hàng có cùng category lại với nhau.
  2. Đối với mỗi nhóm, nó cộng tổng amount.
  3. Kết quả sẽ hiển thị mỗi category duy nhất và tổng doanh số bán hàng tương ứng của nó.

Ví dụ 2: Nhóm nhiều cột

Bây giờ, hãy tưởng tượng chúng ta muốn nhóm theo cả categoryproduct:

SELECT category, product, COUNT(*) as product_count
FROM sales
GROUP BY category, product;

Truy vấn này:

  1. Nhóm các hàng có cùng categoryproduct.
  2. Đếm số lần mỗi sự kết hợp duy nhất xuất hiện.
  3. Hiển thị mỗi cặp category-product duy nhất và số lượng của nó.

Ví dụ 3: Sử dụng HAVING

Đôi khi, chúng ta muốn lọc kết quả nhóm của mình. Đó là lúc HAVING xuất hiện:

SELECT category, SUM(amount) as total_sales
FROM sales
GROUP BY category
HAVING SUM(amount) > 1000;

Truy vấn này:

  1. Nhóm doanh số bán hàng theo category.
  2. Tính tổng doanh số bán hàng cho mỗi danh mục.
  3. Chỉ hiển thị các danh mục có tổng doanh số bán hàng lớn hơn 1000.

Nhớ rằng, HAVING giống như WHERE, nhưng cho dữ liệu đã nhóm!

Hàm tổng hợp phổ biến

Dưới đây là bảng tiện ích của các hàm tổng hợp phổ biến bạn có thể sử dụng với GROUP BY:

Hàm Mô tả Ví dụ
COUNT() Đếm số lượng hàng COUNT(*)
SUM() Tính tổng của một tập giá trị SUM(amount)
AVG() Tính trung bình của một tập giá trị AVG(price)
MAX() Tìm giá trị lớn nhất MAX(score)
MIN() Tìm giá trị nhỏ nhất MIN(temperature)

Mẹo và thủ thuật

  1. Thứ tự quan trọng: Mệnh đề ORDER BY, nếu được sử dụng, nên đến sau GROUP BY.
  2. Alias: Sử dụng alias (như AS total_sales) để đặt tên ý nghĩa cho các cột kết quả của bạn.
  3. Gỡ lỗi: Nếu bạn nhận được kết quả không mong muốn, hãy kiểm tra xem bạn đã bao gồm tất cả các cột không phải là hàm tổng hợp trong mệnh đề GROUP BY chưa.

Mối nguy hiểm phổ biến

  1. Quên cột: Mỗi cột trong SELECT không phải là hàm tổng hợp phải có trong mệnh đề GROUP BY.
  2. Sử dụng WHERE thay vì HAVING: Nhớ rằng, WHERE lọc các hàng trước khi nhóm, HAVING lọc sau khi nhóm.

Kết luận

Chúc mừng! Bạn đã刚刚 bước vào thế giới của GROUP BY trong PostgreSQL. Nhớ rằng, giống như việc học骑自行车, việc thành thạo GROUP BY cần phải thực hành. Đừng ngại thử nghiệm với các truy vấn khác nhau và các bộ dữ liệu khác nhau.

Khi chúng ta kết thúc, đây là một chút hài hước về cơ sở dữ liệu: Tại sao truy vấn SQL phải đi điều trị? Nó có quá nhiều vấn đề GROUP! ?

Tiếp tục thực hành, giữ vững sự tò mò, và sớm bạn sẽ nhóm dữ liệu như một chuyên gia. Hẹn gặp lại, chúc bạn vui vẻ khi truy vấn!

Credits: Image by storyset