Khi làm việc với các tập dữ liệu trong PostgreSQL, hai trong số các công cụ mạnh mẽ và hữu ích là GROUP BY
và WINDOW
(các hàm phân tích). Mặc dù cả hai đều được sử dụng để tổng hợp dữ liệu, chúng có các ứng dụng và cách sử dụng khác nhau. Bài viết này sẽ giải thích sự khác biệt giữa WINDOW
và GROUP BY
, cũng như cách sử dụng chúng.
GROUP BY
được sử dụng để nhóm các hàng dựa trên một hoặc nhiều cột, cho phép bạn thực hiện các phép tính tổng hợp (như SUM
, AVG
, COUNT
, v.v.) trên từng nhóm.
SELECT column1, SUM(column2) FROM table_name GROUP BY column1;
Giả sử bạn có bảng sales
với các cột product
, quantity
và bạn muốn biết tổng số lượng bán cho từng sản phẩm:
SELECT product, SUM(quantity) AS total_quantity FROM sales GROUP BY product;
Hàm phân tích (WINDOW functions
) cho phép bạn thực hiện các phép tính tổng hợp trên một tập con của dữ liệu mà không làm mất đi thông tin của các hàng gốc. Điều này có nghĩa là bạn có thể xem xét các hàng trong ngữ cảnh của chúng mà không cần nhóm chúng lại.
SELECT column1, SUM(column2) OVER (PARTITION BY column1 ORDER BY column3) AS running_total FROM table_name;
Nếu bạn muốn tính toán tổng số lượng bán cho mỗi sản phẩm nhưng vẫn giữ lại thông tin của từng hàng, bạn có thể sử dụng hàm phân tích:
SELECT product, quantity, SUM(quantity) OVER (PARTITION BY product ORDER BY date) AS running_total FROM sales;
Khi sử dụng GROUP BY
, kết quả trả về chỉ chứa một hàng cho mỗi nhóm đã được xác định. Điều này có nghĩa là bạn sẽ không thấy các hàng gốc, chỉ thấy kết quả tổng hợp.
Kết quả của ví dụ trên với GROUP BY
:
product | total_quantity |
---|---|
A | 100 |
B | 150 |
Khi sử dụng hàm phân tích, kết quả sẽ bao gồm tất cả các hàng gốc, và các giá trị tổng hợp sẽ được tính toán cho từng hàng mà không làm mất đi thông tin chi tiết.
Kết quả của ví dụ trên với WINDOW
:
product | quantity | running_total |
---|---|---|
A | 10 | 10 |
A | 20 | 30 |
A | 70 | 100 |
B | 50 | 50 |
B | 100 | 150 |
Sự khác biệt giữa GROUP BY
và WINDOW
trong PostgreSQL chủ yếu nằm ở cách thức và mục đích sử dụng. GROUP BY
được sử dụng để nhóm dữ liệu và trả về một hàng cho mỗi nhóm, trong khi hàm phân tích cho phép bạn tính toán các phép tổng hợp trên các hàng mà không làm mất đi thông tin chi tiết. Tùy thuộc vào nhu cầu phân tích dữ liệu của bạn, bạn có thể lựa chọn công cụ phù hợp để đạt được kết quả mong muốn.