NHÓM THEO và CÓ
Để có được thông tin chuyên sâu hơn và sắp xếp dữ liệu tốt hơn trong cơ sở dữ liệu, SQL giới thiệu các mệnh GROUP BY đề và HAVING mạnh mẽ.
Các công cụ này cho phép bạn chuyển đổi dữ liệu thô thành các bản tóm tắt có ý nghĩa bằng cách phân loại các hàng và áp dụng hàm tổng hợp, giúp dễ dàng phân tích xu hướng, xác định mẫu hình hoặc tạo báo cáo phù hợp với các danh mục cụ thể.
NHÓM THEO
Để phân tích dữ liệu theo danh mục hoặc nhóm, SQL cung cấp GROUP BY mệnh đề. Mệnh đề này phân loại các hàng dựa trên các giá trị trong các cột đã xác định, phân vùng dữ liệu thành các tập hợp con một cách hiệu quả.
Sức mạnh thực sự của GROUP BY được tiết lộ khi nó được sử dụng với các hàm tổng hợp. Các hàm tổng hợp, chẳng hạn COUNT()như , SUM(), AVG()vàMIN() thực MAX() hiện tính toán trên các nhóm này, cho phép bạn tạo thống kê tóm tắt cho từng thể loại.
Ví dụ, bạn có thể dùng hàm GROUP BY để tính toán: doanh thu -total SUM() cho từng danh mục sản phẩm, -average AVG() giá sản phẩm từ từng nhà cung cấp, -number COUNT() hàng tại mỗi thành phố.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
Truy vấn này truy xuất giá trung bình của các sản phẩm trong mỗi thể loại bằng cách nhóm các hàng của bảng sales.products theo của chúng category_id. Bằng cách áp dụng hàm AVG() cho cột price , truy vấn tính toán giá trị trung bình của giá cho tất cả các sản phẩm dưới mọi giá trị riêng biệt category_id.
GROUP BY mệnh đề không phải lúc nào cũng cần được ghép nối với các hàm tổng hợp. Mặc dù tính năng này thường được sử dụng cùng với các hàm tổng hợp để thực hiện tính toán trên dữ liệu được nhóm, GROUP BY nhưng bạn cũng có thể dùng chính dữ liệu này để sắp xếp dữ liệu thành các nhóm cho các mục đích khác, chẳng hạn như truy xuất sự kết hợp khác biệt của cột.
SELECT category_id
FROM sales.products
GROUP BY category_id;
Truy vấn này nhóm các hàng bằng cách không category_id thực hiện bất kỳ phép tổng hợp nào, chỉ cần liệt kê từng hàng riêng category_id biệt có trong sales.products bảng.
CÓ
Trong SQL, không thể WHERE sử dụng mệnh đề để lọc kết quả của các hàm tổng hợp.
Để lọc các nhóm được tạo bởi mệnh đề GROUP BY dựa trên kết quả hàm tổng hợp, bạn sử dụng mệnh HAVING đề.
HAVING
WHERE Hãy coi như một mệnh đề cho nhóm: mệnh đề cho phép bạn áp dụng điều kiện cho dữ liệu tóm tắt được tạo ra bởi các hàm tổng hợp, cho phép bạn tinh chỉnh phân tích của mình để tập trung vào các nhóm liên quan.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
Truy vấn này tính giá trị trung bình price của các sản phẩm trong mỗi thể loại bằng cách nhóm các hàng của sales.products bảng theo của chúng category_id. Sau đó, bộ lọc kết quả sẽ chỉ bao gồm những thể loại có mức trung price bình vượt quá 30 bằng mệnh HAVING đề.