Tìm hiểu về hàm having trong SQL Server

Hàm having trong SQL server là hàm câu điều kiện, thường xuyên được sử dụng trong các chương trình và bài toán. Hàm này có thể kết hợp cùng nhiều câu lệnh như group by, order by. Vậy thì having sql server là gì? Cách dùng như thế nào? Cùng Comdy tìm hiểu chi tiết trong bài viết này nhé.

Giới thiệu về hàm HAVING trong SQL Server

Giới thiệu về hàm having trong SQL
Having là một mệnh đề trong SQL được sử dụng để lọc kết quả của một câu lệnh Select, group by theo một điều kiện có sẵn

Having SQL là gì?

Having là một mệnh đề trong SQL được sử dụng để lọc kết quả của một câu lệnh Select, group by theo một điều kiện có sẵn. Mặc dù Where được sử dụng để lọc dữ liệu trước khi nhóm và sắp xếp, Having được sử dụng để lọc dữ liệu sau khi đã thực hiện Group by. (grooup by là hàm sử dụng để gom nhóm trong sql).

Having trong SQL để làm gì?

Mệnh đề having sql server thường được sử dụng với mệnh đề GROUP BY để lọc các nhóm dựa trên một danh sách các điều kiện. Sau đây minh họa cú pháp mệnh đề sql having:

SELECT
    select_list
FROM
    table_name
GROUP BY
    group_list
HAVING
    conditions;

Trong cú pháp này, mệnh đề GROUP BY sẽ tổng hợp các bản ghi thành các nhóm và mệnh đề HAVING sẽ áp dụng một hoặc nhiều điều kiện cho các nhóm này.

Chỉ các nhóm thỏa mãn điều kiện trong mệnh đề sql server having mới được bao gồm trong tập kết quả.

Vì SQL Server xử lý mệnh đề HAVING sau mệnh đề GROUP BY, bạn không thể sử dụng bí danh cột để tham chiếu đến các hàm tập hợp được chỉ định trong câu lệnh SELECT. Truy vấn sau đây sẽ thất bại:

SELECT
    column_name1,
    column_name2,
    aggregate_function (column_name3) column_alias
FROM
    table_name
GROUP BY
    column_name1,
    column_name2
HAVING
    column_alias > value;

Thay vào đó, bạn phải sử dụng các hàm tập hợp trực tiếp trong mệnh đề HAVING một cách rõ ràng như sau:

SELECT
    column_name1,
    column_name2,
    aggregate_function (column_name3) alias
FROM
    table_name
GROUP BY
    column_name1,
    column_name2
HAVING
    aggregate_function (column_name3) > value;

Ví dụ về câu lệnh HAVING trong SQL Server

Ví dụ về câu lệnh HAVING trong SQL
Lấy ví dụ cụ thể về các trường hợp câu lệnh HAVING trong SQL

Hãy lấy một số ví dụ để hiểu cách HAVINGhoạt động của mệnh đề.

Sử dụng HAVING với hàm COUNT trong SQL Server

Câu lệnh sau đây sử dụng mệnh đề having count trong sql để tìm các khách hàng đã đặt ít nhất hai đơn hàng mỗi năm:

SELECT
    customer_id,
    YEAR (order_date),
    COUNT (order_id) order_count
FROM
    sales.orders
GROUP BY
    customer_id,
    YEAR (order_date)
HAVING
    COUNT (order_id) >= 2
ORDER BY
    customer_id;

Trong ví dụ này:

  • Đầu tiên, mệnh đề GROUP BY nhóm các đơn đặt hàng theo khách hàng và năm đặt hàng. Hàm COUNT() trả về số lượng đơn đặt hàng mỗi khách hàng được đặt trong mỗi năm.
  • Thứ hai, mệnh đề HAVING sẽ lọc bỏ tất cả các khách hàng có số lượng đơn đặt hàng ít hơn hai.

Sử dụng HAVING với hàm SUM trong SQL Server

Câu lệnh sau đây tìm kiếm các đơn đặt hàng có giá trị ròng lớn hơn 20.000:

SELECT
    order_id,
    SUM (
        quantity * list_price * (1 - discount)
    ) net_value
FROM
    sales.order_items
GROUP BY
    order_id
HAVING
    SUM (
        quantity * list_price * (1 - discount)
    ) > 20000
ORDER BY
    net_value;

Trong ví dụ này:

  • Đầu tiên, hàm SUM trả về giá trị ròng của đơn đặt hàng.
  • Thứ hai, mệnh đề HAVING lọc bỏ tất cả các đơn đặt hàng có giá trị ròng nhỏ hơn hoặc bằng 20.000.

Sử dụng having min và having max trong SQL (sql server having max)

Hàm having có thể kết hợp với hàm max trong sql. Câu lệnh sau đây trước tiên tìm giá niêm yết tối đa và tối thiểu trong mỗi loại sản phẩm. Sau đó, nó lọc ra các loại sản phẩm có giá niêm yết tối đa lớn hơn 4.000 hoặc giá niêm yết tối thiểu nhỏ hơn 500:

SELECT
    category_id,
    MAX (list_price) max_list_price,
    MIN (list_price) min_list_price
FROM
    production.products
GROUP BY
    category_id
HAVING
    MAX (list_price) > 4000 OR MIN (list_price) < 500;

Sử dụng mệnh đề HAVING trong SQL với hàm AVG

Câu lệnh sau đây tìm kiếm các loại sản phẩm có giá niêm yết trung bình nằm trong khoảng từ 500 đến 1.000:

SELECT
category_id,
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
category_id
HAVING
AVG (list_price) BETWEEN 500 AND 1000;

Sử dụng group by having trong SQL

Group by having sql là hai phần quan trọng trong câu lệnh SQL để thực hiện các thống kê và lọc dữ liệu trong các nhóm.

Ví dụ về mệnh đề group by … having:

Giả sử bạn có một bảng “orders” lưu trữ thông tin đơn hàng của một cửa hàng:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10, 2)
);
INSERT INTO orders VALUES (1, 101, ‘2024-01-01’, 150.00);
INSERT INTO orders VALUES (2, 102, ‘2024-01-02’, 200.00);
INSERT INTO orders VALUES (3, 101, ‘2024-01-03’, 100.00);
INSERT INTO orders VALUES (4, 103, ‘2024-01-04’, 250.00);
INSERT INTO orders VALUES (5, 102, ‘2024-01-05’, 180.00);

Nếu muốn tính tổng số đơn hàng và tổng giá trị đơn hàng cho mỗi khách hàng và chỉ lấy những khách hàng có tổng giá trị đơn hàng lớn hơn 200, bạn có thể sử dụng having và where trong sql như sau:

SELECT
customer_id,
COUNT(order_id) AS total_orders,
SUM(total_amount) AS total_amount
FROM
orders
GROUP BY
customer_id
HAVING
SUM(total_amount) > 200;

Kết quả từ ví dụ having group by trong sql sẽ là danh sách các khách hàng (customer_id) cùng với tổng số đơn hàng (total_orders) và tổng giá trị đơn hàng (total_amount). Trong đó chỉ bao gồm những khách hàng có tổng giá trị đơn hàng lớn hơn 200.

Sử dụng where và having trong SQL

"Sử

WHERE và HAVING đều được sử dụng để lọc dữ liệu trong câu lệnh SQL, nhưng chúng được sử dụng ở các pha khác nhau của truy vấn.

  • Mệnh đề where

WHERE được sử dụng trong câu lệnh SELECT, UPDATE, hoặc DELETE để lọc dữ liệu trước khi nhóm, tổng hợp hoặc sắp xếp.

Nó áp dụng điều kiện cho mỗi bản ghi riêng lẻ trước khi chúng được nhóm hoặc tổng hợp.

Ví dụ:

SELECT column1, column2
FROM your_table
WHERE column3 > 100;

  • Mệnh đề having

HAVING được sử dụng sau mệnh đề GROUP BY trong câu lệnh SELECT để lọc kết quả nhóm dựa trên các điều kiện tổng hợp.

Nó áp dụng điều kiện cho từng nhóm kết quả sau khi đã thực hiện các phép nhóm hoặc tổng hợp bởi GROUP BY.

Ví dụ:

SELECT column1, COUNT(*)
FROM your_table
GROUP BY column1
HAVING COUNT(*) > 5;

Mệnh đề having chỉ có thể được sử dụng với?

Mệnh đề having chỉ có thể được sử dụng với
Mệnh đề having in sql server chỉ có thể được sử dụng cùng với mệnh đề group by trong các truy vấn

Mệnh đề having in sql server chỉ có thể được sử dụng cùng với mệnh đề group by trong các truy vấn SQL/MySQL. Having thường được sử dụng để lọc các kết quả đã được nhóm bởi group by dựa trên các điều kiện cụ thể.

Mặc định, where được sử dụng để lọc dữ liệu trước khi nhóm và sắp xếp, trong khi having trong mysql được sử dụng để lọc kết quả sau khi đã thực hiện group by.

Select count trong SQL server

Trong SQL Server, câu lệnh SELECT COUNT được sử dụng để đếm số lượng bản ghi (rows) trong một bảng hoặc thỏa mãn điều kiện cụ thể trong một truy vấn. Dưới đây là một số ví dụ về cách bạn có thể sử dụng SELECT COUNT:

  • Đếm toàn bộ số lượng bản ghi trong một bảng
SELECT COUNT(*)
FROM table_name;
  • Đếm số lượng bản ghi thỏa mãn một điều kiện cụ thể

SELECT COUNT(*)
FROM table_name
WHERE condition;

  • Đếm số lượng bản ghi duy nhất của một cột cụ thể

SELECT COUNT(DISTINCT column_name)
FROM table_name;

Having có thể kết hợp với order by trong SQL không?

Having có thể kết hợp với order by trong SQL không
HAVING và ORDER BY thường được sử dụng cùng nhau trong một câu lệnh SELECT

Trong SQL, HAVING và ORDER BY thường được sử dụng cùng nhau trong một câu lệnh SELECT khi bạn muốn nhóm dữ liệu sử dụng GROUP BY, áp dụng điều kiện lọc với HAVING, và sau đó sắp xếp kết quả với ORDER BY.

Ví dụ:

SELECT
column1,
COUNT(*) AS total_records
FROM
your_table
GROUP BY
column1
HAVING
COUNT(*) > 1
ORDER BY
total_records DESC;

Điều kiện nhóm được đặt sau mệnh đề nào?

Điều kiện nhóm được đặt sau mệnh đề HAVING. Trong một câu lệnh SQL, phần GROUP BY thường đi trước phần HAVING. Cụ thể, khi bạn sử dụng mệnh đề GROUP BY để nhóm dữ liệu theo một hoặc nhiều cột, sau đó bạn có thể sử dụng mệnh đề HAVING để áp dụng điều kiện lọc cho các nhóm dựa trên các điều kiện về giá trị tổng hợp của các cột.

Cú pháp tổng quát:

SELECT column1, aggregate_function(column2) AS alias_name
FROM your_table
GROUP BY column1
HAVING aggregate_function(column2) condition;

Cách sử dụng select max trong SQL server

Cách sử dụng select max trong SQL server
Sử dụng select max để trả về giá trị lớn nhất từ một cột hoặc một tập hợp các giá trị

Trong SQL, bạn có thể sử dụng hàm MAX() để trả về giá trị lớn nhất từ một cột hoặc một tập hợp các giá trị. Dưới đây là cách sử dụng SELECT MAX trong SQL:

Sử dụng hàm max trong sql với 1 cột

SELECT MAX(column_name) AS max_value
FROM table_name;

Sử dụng hàm max trong sql với nhiều cột

SELECT MAX(salary) AS max_salary
FROM employees;

Kết lại

Trên đây là toàn bộ chia sẻ của Comdy về hàm having trong sql server. Hi vọng những thông tin trong bài viết này là bổ ích và có ý nghĩa đối với bạn. Xin cám ơn!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *