SQL - Group By vs Order By

Xin chào các bạn đam mê SQL! Hôm nay, chúng ta sẽ cùng tìm hiểu về hai mệnh đề quan trọng trong SQL: Group By và Order By. Như một người giáo viên máy tính gần gũi, tôi rất vui được hướng dẫn các bạn qua những khái niệm này. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu bạn thích), và cùng bắt đầu hành trình SQL của chúng ta nhé!

SQL - Group By vs Order By

Mệnh đề SQL Group By

Group By là gì?

Mệnh đề Group By giống như một người tổ chức giúp bạn sắp xếp dữ liệu. Hãy tưởng tượng bạn có một tủ quần áo bừa bộn. Group By giúp bạn phân loại những món đồ vào từng đống ngăn nắp dựa trên một số đặc điểm nhất định - như màu sắc hoặc loại quần áo.

Trong thuật ngữ SQL, Group By cho phép bạn sắp xếp dữ liệu vào các nhóm dựa trên một hoặc nhiều cột. Điều này đặc biệt hữu ích khi bạn muốn thực hiện các phép toán hoặc tóm tắt trên các nhóm này.

Cú pháp cơ bản

Dưới đây là cấu trúc cơ bản của một mệnh đề Group By:

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

Hãy phân tích nó:

  • Chúng ta SELECT các cột mà chúng ta muốn thấy trong kết quả.
  • Chúng ta chỉ định bảng mà chúng ta lấy dữ liệu FROM.
  • Phần GROUP BY cho biết SQL sẽ sử dụng các cột nào để nhóm.

Ví dụ 1: Nhóm doanh số theo sản phẩm

Hãy tưởng tượng chúng ta có một bảng叫做 sales với các cột: product_name, quantity_sold, và sale_date. Hãy nhóm doanh số của chúng ta theo sản phẩm:

SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name;

Truy vấn này sẽ hiển thị tổng số lượng bán ra cho mỗi sản phẩm. Dưới đây là những gì đang xảy ra:

  1. Chúng ta SELECT product_name và tổng của quantity_sold.
  2. Chúng ta lấy dữ liệu này FROM bảng sales.
  3. Chúng ta GROUP BY product_name, vì vậy SQL sẽ tạo một nhóm cho mỗi sản phẩm duy nhất.

Kết quả có thể trông như thế này:

product_name total_sold
Apple 150
Banana 200
Orange 175

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

Chúng ta cũng có thể nhóm theo nhiều cột. Hãy giả sử chúng ta muốn nhóm doanh số theo cả sản phẩm và ngày:

SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date;

Truy vấn này nhóm doanh số của chúng ta theo cả sản phẩm và ngày, hiển thị tổng số lượng bán ra hàng ngày cho mỗi sản phẩm.

Mệnh đề SQL Order By

Order By là gì?

Nếu Group By là người tổ chức tủ quần áo, thì Order By giống như việc sắp xếp quần áo từ nhẹ nhất đến nặng nhất hoặc từ ngắn nhất đến最长. Nó tất cả về việc sắp xếp dữ liệu của chúng ta theo một thứ tự cụ thể.

Cú pháp cơ bản

Cấu trúc cơ bản của một mệnh đề Order By là:

SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
  • ASC có nghĩa là thứ tự tăng dần (nhỏ nhất đến lớn nhất, hoặc A đến Z).
  • DESC có nghĩa là thứ tự giảm dần (lớn nhất đến nhỏ nhất, hoặc Z đến A).
  • Nếu bạn không chỉ định, SQL sẽ giả định ASC là mặc định.

Ví dụ 3: Sắp xếp sản phẩm theo doanh số

Hãy sắp xếp các sản phẩm theo tổng doanh số:

SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name
ORDER BY total_sold DESC;

Truy vấn này thực hiện như sau:

  1. Nhóm doanh số theo sản phẩm.
  2. Tính tổng số lượng bán ra cho mỗi sản phẩm.
  3. Sắp xếp kết quả từ cao đến thấp.

Kết quả có thể trông như thế này:

product_name total_sold
Banana 200
Orange 175
Apple 150

Ví dụ 4: Sắp xếp theo nhiều cột

Chúng ta cũng có thể sắp xếp theo nhiều cột:

SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date
ORDER BY product_name ASC, daily_total DESC;

Truy vấn này:

  1. Nhóm doanh số theo sản phẩm và ngày.
  2. Sắp xếp trước theo tên sản phẩm (theo bảng chữ cái).
  3. Sau đó sắp xếp theo tổng số lượng bán ra hàng ngày trong mỗi nhóm sản phẩm (từ cao đến thấp).

So sánh Group By và Order By

Bây giờ chúng ta đã xem xét cả hai mệnh đề Group By và Order By, hãy so sánh chúng:

Tính năng Group By Order By
Mục đích Tổ chức dữ liệu thành các nhóm Sắp xếp dữ liệu theo thứ tự cụ thể
Sử dụng Sử dụng với các hàm tổng hợp Có thể sử dụng với hoặc không có tổng hợp
Kết quả Giảm số lượng hàng (tóm tắt) Không thay đổi số lượng hàng
Vị trí Đến trước ORDER BY trong truy vấn Đến sau GROUP BY (nếu có)
Chức năng Tạo nhóm cho phép tính toán tổng hợp Xác định thứ tự của các hàng đầu ra

Khi nào nên sử dụng Group By

Sử dụng Group By khi bạn muốn:

  • Tóm tắt dữ liệu (như tính tổng hoặc trung bình cho mỗi nhóm).
  • Thực hiện các phép toán trên các nhóm dữ liệu.
  • Giảm số lượng hàng trong kết quả của bạn.

Khi nào nên sử dụng Order By

Sử dụng Order By khi bạn muốn:

  • Sắp xếp kết quả theo một thứ tự cụ thể (tăng dần hoặc giảm dần).
  • Trình bày dữ liệu theo một thứ tự dễ đọc hoặc logic.
  • Tìm các giá trị cao nhất hoặc thấp nhất trong bộ dữ liệu của bạn.

Ví dụ 5: Kết hợp Group By và Order By

Hãy kết hợp tất cả lại trong một ví dụ cuối cùng. Giả sử chúng ta muốn tìm ba sản phẩm bán chạy nhất mỗi tháng:

SELECT
EXTRACT(MONTH FROM sale_date) as month,
product_name,
SUM(quantity_sold) as total_sold
FROM
sales
GROUP BY
EXTRACT(MONTH FROM sale_date), product_name
ORDER BY
month ASC, total_sold DESC
LIMIT 3;

Truy vấn này:

  1. Nhóm doanh số theo tháng và sản phẩm.
  2. Tính tổng số lượng bán ra cho mỗi sản phẩm trong mỗi tháng.
  3. Sắp xếp kết quả theo tháng (tăng dần) và sau đó theo tổng số lượng bán ra (giảm dần).
  4. Giới hạn kết quả trong ba sản phẩm bán chạy nhất mỗi tháng.

Và thế là xong! Chúng ta đã cùng nhau khám phá qua các vùng đất của Group By và Order By. Nhớ rằng, thực hành là cách tốt nhất để hoàn thiện, vì vậy đừng ngại thử nghiệm các mệnh đề này trong các truy vấn của riêng bạn. Chúc các bạn may mắn với SQL, và dữ liệu của bạn luôn được tổ chức tốt và sıralı!

Credits: Image by storyset