PostgreSQL - Mệnh đề HAVING
Mệnh đề HAVING cho phép chúng ta chọn ra các hàng cụ thể mà kết quả của hàm đáp ứng một số điều kiện.
Mệnh đề WHERE đặt điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đặt điều kiện cho các nhóm được tạo bởi mệnh đề GROUP BY.
Cú pháp
Sau đây là vị trí của mệnh đề HAVING trong truy vấn SELECT:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Mệnh đề HAVING phải theo sau mệnh đề GROUP BY trong một truy vấn và cũng phải đứng trước mệnh đề ORDER BY nếu được sử dụng. Sau đây là cú pháp của câu lệnh SELECT, bao gồm mệnh đề HAVING -
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
Thí dụ
Xem xét bảng COMPANY có các bản ghi như sau:
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Sau đây là một ví dụ, sẽ hiển thị bản ghi mà số tên nhỏ hơn 2 -
testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
Điều này sẽ tạo ra kết quả sau:
name
-------
Teddy
Paul
Mark
David
Allen
Kim
James
(7 rows)
Bây giờ, chúng ta hãy tạo thêm ba bản ghi trong bảng COMPANY bằng cách sử dụng các câu lệnh INSERT sau:
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
Bây giờ, bảng của chúng ta có các bản ghi sau với tên trùng lặp:
id | name | age | address | salary
----+-------+-----+--------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
9 | James | 44 | Norway | 5000
10 | James | 45 | Texas | 5000
(10 rows)
Sau đây là ví dụ, sẽ hiển thị bản ghi mà số lượng tên lớn hơn 1 -
testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) > 1;
Điều này sẽ tạo ra kết quả sau:
name
-------
Paul
James
(2 rows)