MỞ ĐẦU
ORACLE TABLE
ORACLE QUERY
ORACLE CONDITION
ORACLE CLAUSES
ORACLE OPERATORS
ORACLE JOINS
ORACLE REFERENCE
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Lọc kết quả ở Group By với lệnh Having trong Oracle

Ở lệnh SELECT chúng ta có WHERE dùng để lọc, vậy ở Group By sẽ lọc dữ liệu bằng cách nào? Rất đơn giản, bạn sẽ sử dụng lệnh HAVING, lệnh này có cách dùng giống với lệnh WHERE.

1. Cú pháp Having trong Oracle

Trước tiên mình sẽ đưa ra cú pháp:

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

SELECT expression1, expression2, ... expression_n 
FROM tables  
WHERE conditions  
GROUP BY expression1, expression2, ... expression_n  
HAVING having_condition; 

Trong đó:

  • expression1, expression2, ... expression_n là các column sẽ được chọn cho kết quả cuối cùng
  • tables là bảng cần truy vấn
  • conditions là điều kiện ở where
  • having_conditions là điều kiện của HAVING, cái này là chủ chốt của bài học hôm nay.

Có những điều kiện ta không thể lọc ở lệnh WHERE được. Ví dụ mình muốn lấy tổng số sinh viên của của từng khoa, và chỉ hiển thị khoa nào có tổng sinh viên lớn hơn 50.

Bảng students sẽ có các thông tin như sau: id | name | department

Và nếu mình viết thế này là sai:

SELECT department, count(id) as total_student
FROM students
WHERE total_student> 50
GROUP BY department

Tại sao sai? Để giải thích mình sẽ nói qua câu lệnh SQL hoạt động như thế nào đã nhé. 

Như ta biết trong một câu lệnh SQL sẽ có rất nhiều lệnh con, vậy thứ tự hoạt động của nó như thế nào? Nó sẽ hoạt động như sau:

FROM > WHERE > GROUP BY > HAVING > DISTINCT > SELECT > ORDER BY

Dựa vào câu truy vấn ở trên thì ta thấy FROM -> WHERE, mà lúc này column  ở WHERE là total_student không hề tồn tại (vì lệnh SELECT chưa chạy), nên câu SQL này sai. Ta sẽ sửa lại như sau:

SELECT department, count(id) as total_student
FROM students
GROUP BY department
HAVING total_student > 50

2. Một vài ví dụ với lệnh HAVING trong Oracle

Giả sử cho bảng customers có dữ liệu như sau:

having1 png

Hãy lấy danh sách state và tổng số khách hàng của state đó, và chỉ lấy state nào có từ 2  khách hàng trở lên.

SELECT state, COUNT(*) AS total_customer  
FROM customers  
GROUP BY state  
HAVING total_customer >= 2;

Giả sử giờ mình sửa lại điều kiện như sau: Lấy danh sách state và tổng số khách hàng có mức lương lớn hơn 10000, và chỉ lấy state nào có từ 2 khách hàng thỏa điều kiện trở lên.

SELECT state, COUNT(*) AS total_customer  
FROM customers  
WHERE salary > 10000  
GROUP BY state  
HAVING total_customer >= 2; 

3. Lời kết

Trên là tất cả kiến thức về having trong Oracle mà mình muốn giới thiệu tới các bạn. 

Sau này khi nói đến Group by thì các bạn hãy nhớ tới Having nhé, vì đây là cặp mệnh đề đi liền với nhau, rất thường được sử dụng trong các câu truy vấn thống kê.

Cùng chuyên mục:

Hàm Hàm ASCII trong Oracle

Hàm Hàm ASCII trong Oracle

Cách sử dụng hàm Hàm ASCII trong 150

Hàm Hàm ASCIISTR trong Oracle

Hàm Hàm ASCIISTR trong Oracle

Cách sử dụng hàm Hàm ASCIISTR trong 150

Hàm Hàm CHR trong Oracle

Hàm Hàm CHR trong Oracle

Cách sử dụng hàm Hàm CHR trong 150

Hàm Hàm COMPOSE trong Oracle

Hàm Hàm COMPOSE trong Oracle

Cách sử dụng hàm Hàm COMPOSE trong 150

Hàm Hàm CONCAT trong Oracle

Hàm Hàm CONCAT trong Oracle

Cách sử dụng hàm Hàm CONCAT trong 150

Hàm Hàm CONVERT trong Oracle

Hàm Hàm CONVERT trong Oracle

Cách sử dụng hàm Hàm CONVERT trong 150

Hàm Hàm DECOMPOSE trong Oracle

Hàm Hàm DECOMPOSE trong Oracle

Cách sử dụng hàm Hàm DECOMPOSE trong 150

Hàm Hàm DUM trong Oracle

Hàm Hàm DUM trong Oracle

Cách sử dụng hàm Hàm DUM trong 150

Hàm Hàm INITCAP trong Oracle

Hàm Hàm INITCAP trong Oracle

Cách sử dụng hàm Hàm INITCAP trong 150

Hàm Hàm INSTR trong Oracle

Hàm Hàm INSTR trong Oracle

Cách sử dụng hàm Hàm INSTR trong 150

Hàm Hàm INSTR2 trong Oracle

Hàm Hàm INSTR2 trong Oracle

Cách sử dụng hàm Hàm INSTR2 trong 150

Hàm Hàm INSTR4 trong Oracle

Hàm Hàm INSTR4 trong Oracle

Cách sử dụng hàm Hàm INSTR4 trong 150

Hàm Hàm INSTRB trong Oracle

Hàm Hàm INSTRB trong Oracle

Cách sử dụng hàm Hàm INSTRB trong 150

Hàm Hàm INSTRC trong Oracle

Hàm Hàm INSTRC trong Oracle

Cách sử dụng hàm Hàm INSTRC trong 150

Hàm Hàm LENGTH trong Oracle

Hàm Hàm LENGTH trong Oracle

Cách sử dụng hàm Hàm LENGTH trong 150

Hàm Hàm LENGTH2 trong Oracle

Hàm Hàm LENGTH2 trong Oracle

Cách sử dụng hàm Hàm LENGTH2 trong 150

Hàm Hàm LOWER trong Oracle

Hàm Hàm LOWER trong Oracle

Cách sử dụng hàm Hàm LOWER trong 150

Hàm Hàm LPAD trong Oracle

Hàm Hàm LPAD trong Oracle

Cách sử dụng hàm Hàm LPAD trong 150

Hàm Hàm LTRIM trong Oracle

Hàm Hàm LTRIM trong Oracle

Cách sử dụng hàm Hàm LTRIM trong 150

Hàm Hàm NCHR trong Oracle

Hàm Hàm NCHR trong Oracle

Cách sử dụng hàm Hàm NCHR trong 150

Top