Sự khác biệt giữa WINDOW và GROUP BY trong PostgreSQL là gì?
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.
1. Cách Hoạt Động
GROUP BY
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.
Cú pháp:
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1;
Ví dụ:
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;
WINDOW (Hàm Phân Tích)
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.
Cú pháp:
SELECT column1, SUM(column2) OVER (PARTITION BY column1 ORDER BY column3) AS running_total
FROM table_name;
Ví dụ:
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;
2. Kết Quả Trả Về
GROUP BY
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
WINDOW
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
3. Ứng Dụng
Khi Nào Sử Dụng GROUP BY
Khi bạn cần tổng hợp dữ liệu và không cần giữ lại thông tin chi tiết của các hàng gốc.
Khi bạn cần các giá trị duy nhất cho mỗi nhóm và không cần đến dữ liệu của từng hàng.
Khi Nào Sử Dụng WINDOW
Khi bạn cần tổng hợp dữ liệu nhưng vẫn muốn giữ lại thông tin của từng hàng gốc.
Khi bạn cần tính toán các giá trị dựa trên ngữ cảnh, chẳng hạn như chạy tổng (running total), tỷ lệ phần trăm, hay xếp hạng.
Kết Luận
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.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.