SQL - Câu lệnh HAVING

Xin chào, các pháp sư SQL tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới của câu lệnh HAVING trong SQL. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi ở đây để hướng dẫn bạn qua chuyến phiêu lưu này, từng bước một. Vậy, hãy lấy sổ tay ảo của bạn và cùng nhau nhảy vào!

SQL - Having Clause

Câu lệnh HAVING trong SQL

Hãy tưởng tượng bạn đang cố gắng tổ chức một buổi tiệc, nhưng bạn chỉ muốn mời những người bạn có hơn năm người bạn chung với bạn. Đó chính xác là điều mà câu lệnh HAVING làm trong SQL - nó giúp chúng ta lọc kết quả nhóm dựa trên các điều kiện cụ thể.

Câu lệnh HAVING giống như bảo vệ ở cổng của buổi tiệc dữ liệu của bạn. Nó quyết định哪些 nhóm dữ liệu được vào dựa trên các quy tắc bạn đặt ra. Hãy cùng nhìn vào một ví dụ đơn giản:

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

Trong ví dụ này, chúng ta đang xem xét mức lương trung bình của mỗi phòng ban, nhưng chúng ta chỉ muốn thấy các phòng ban mà mức lương trung bình vượt quá 50.000 đô la. Câu lệnh HAVING là bảo vệ của chúng ta, kiểm tra mỗi nhóm (phòng ban) và chỉ để những nhóm đáp ứng điều kiện của chúng ta vào.

HAVING với câu lệnh GROUP BY

Câu lệnh HAVING thường được sử dụng cùng với GROUP BY, giống như hai người bạn tốt luôn đi cùng nhau. Trong khi GROUP BY tổ chức dữ liệu của chúng ta thành các nhóm, HAVING lọc các nhóm này dựa trên các điều kiện.

Hãy cùng nhìn vào một ví dụ khác:

SELECT product_category, COUNT(*) as product_count
FROM products
GROUP BY product_category
HAVING COUNT(*) > 10
ORDER BY product_count DESC;

Dưới đây là những gì đang xảy ra:

  1. Chúng ta đang nhóm các sản phẩm theo thể loại của chúng.
  2. Chúng ta đếm số lượng sản phẩm trong mỗi thể loại.
  3. Câu lệnh HAVING chỉ để qua các thể loại có hơn 10 sản phẩm.
  4. Cuối cùng, chúng ta sắp xếp kết quả theo số lượng sản phẩm giảm dần.

Đó giống như tổ chức tủ quần áo của bạn, nhưng chỉ giữ lại các phần có hơn 10 món đồ, và sau đó sắp xếp chúng từ nhiều nhất đến ít nhất.

HAVING với câu lệnh ORDER BY

Như bạn đã thấy trong ví dụ trước, HAVING cũng chơi tốt với ORDER BY. Hãy cùng nhìn vào một ví dụ khác:

SELECT customer_id, SUM(order_total) as total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(order_total) > 1000
ORDER BY total_spent DESC;

Truy vấn này giống như tìm kiếm khách hàng VIP của bạn:

  1. Chúng ta nhóm các đơn hàng theo khách hàng.
  2. Chúng ta tính tổng số tiền mà mỗi khách hàng đã chi tiêu.
  3. Câu lệnh HAVING lọc cho những khách hàng đã chi tiêu hơn 1000 đô la.
  4. Chúng ta sau đó sắp xếp các khách hàng VIP này từ người chi tiêu nhiều nhất đến ít nhất.

Câu lệnh HAVING với hàm COUNT()

Hàm COUNT() giống như một người bạn trung thành của HAVING, luôn sẵn sàng giúp đếm thứ gì đó. Dưới đây là một ví dụ:

SELECT author, COUNT(book_id) as book_count
FROM books
GROUP BY author
HAVING COUNT(book_id) >= 5
ORDER BY book_count DESC;

Truy vấn này đang tìm kiếm các tác giả đa tác phẩm:

  1. Chúng ta nhóm sách theo tác giả.
  2. Chúng ta đếm số lượng sách mà mỗi tác giả đã viết.
  3. Câu lệnh HAVING giữ lại chỉ những tác giả có ít nhất 5 cuốn sách.
  4. Chúng ta sắp xếp kết quả để thấy các tác giả đa tác phẩm đầu tiên.

Câu lệnh HAVING với hàm AVG()

AVG() là một người bạn tuyệt vời khác của HAVING. Hãy cùng nhìn vào họ trong hành động:

SELECT department, AVG(performance_score) as avg_score
FROM employee_performance
GROUP BY department
HAVING AVG(performance_score) > 8.5
ORDER BY avg_score DESC;

Truy vấn này giống như tìm kiếm các phòng ban có hiệu suất xuất sắc:

  1. Chúng ta nhóm điểm hiệu suất theo phòng ban.
  2. Chúng ta tính điểm hiệu suất trung bình cho mỗi phòng ban.
  3. Câu lệnh HAVING giữ lại chỉ những phòng ban có điểm trung bình trên 8.5.
  4. Chúng ta sắp xếp kết quả để thấy các phòng ban có hiệu suất cao nhất đầu tiên.

Câu lệnh HAVING với hàm MAX()

Cuối cùng, hãy cùng nhìn vào cách HAVING hoạt động với MAX():

SELECT product_category, MAX(price) as highest_price
FROM products
GROUP BY product_category
HAVING MAX(price) > 1000
ORDER BY highest_price DESC;

Truy vấn này đang tìm kiếm các thể loại sản phẩm cao cấp:

  1. Chúng ta nhóm sản phẩm theo thể loại.
  2. Chúng ta tìm giá cao nhất trong mỗi thể loại.
  3. Câu lệnh HAVING giữ lại chỉ những thể loại có ít nhất một sản phẩm có giá trên 1000 đô la.
  4. Chúng ta sắp xếp kết quả để thấy các thể loại có sản phẩm đắt nhất đầu tiên.

Và thế là bạn đã biết về câu lệnh HAVING và bạn bè của nó trong SQL. Nhớ rằng, thực hành là chìa khóa của thành công, vì vậy đừng ngần ngại thử nghiệm với các truy vấn này. Trước khi bạn biết điều gì, bạn sẽ viết các truy vấn SQL phức tạp như một chuyên gia!

Dưới đây là bảng tham khảo nhanh các phương thức chúng ta đã xem xét:

Phương thức Mô tả Ví dụ
HAVING Lọc kết quả nhóm HAVING AVG(salary) > 50000
GROUP BY Nhóm các hàng có giá trị tương tự GROUP BY department
ORDER BY Sắp xếp kết quả ORDER BY total_spent DESC
COUNT() Đếm số lượng hàng HAVING COUNT(book_id) >= 5
AVG() Tính trung bình của một tập giá trị HAVING AVG(performance_score) > 8.5
MAX() Trả về giá trị lớn nhất trong một tập HAVING MAX(price) > 1000

Chúc các bạn vui vẻ trong việc truy vấn và mong rằng dữ liệu của bạn luôn sạch sẽ và các truy vấn của bạn hiệu quả!

Credits: Image by storyset