Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Mệnh đề SQL HAVING cho người mới bắt đầu

Trong SQL, HAVING mệnh đề có thể được sử dụng để chỉ định điều kiện tìm kiếm cho một nhóm hoặc một tổng hợp.

HAVING mệnh đề thường được sử dụng với GROUP BY mệnh đề. Trong những trường hợp không, thì có một nhóm tổng hợp, đơn lẻ tiềm ẩn.

HAVING mệnh đề tương tự như WHERE , ngoại trừ WHERE lọc các hàng riêng lẻ, trong khi HAVING các nhóm bộ lọc. WHERE mệnh đề lọc dữ liệu trước nó được nhóm lại, trong khi HAVING lọc dữ liệu sau nó được nhóm lại.

Ví dụ 1 - HAVING với COUNT()

Giả sử chúng ta có bảng sau:

SELECT * FROM Pets;

Kết quả:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Chúng tôi có thể chạy truy vấn sau đối với bảng này:

SELECT 
    PetTypeId, 
    COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;

Kết quả:

+-------------+---------+
| PetTypeId   | Count   |
|-------------+---------|
| 3           | 4       |
| 2           | 3       |
+-------------+---------+

Trong trường hợp này, chúng tôi đã sử dụng HAVING mệnh đề kết hợp với GROUP BY mệnh đề để chỉ trả về những hàng có COUNT(PetTypeId) lớn hơn 2 . Điều này sử dụng COUNT() , là một hàm tổng hợp tiêu chuẩn SQL có sẵn trong hầu hết các RDBMS chính.

Nếu chúng ta bỏ qua HAVING , chúng tôi nhận được một kết quả nữa:

SELECT 
    PetTypeId, 
    COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
ORDER BY Count DESC;

Kết quả:

+-------------+---------+
| PetTypeId   | Count   |
|-------------+---------|
| 3           | 4       |
| 2           | 3       |
| 1           | 1       |
+-------------+---------+

Ví dụ 2 - HAVING với SUM()

Đây là một ví dụ khác. Lần này chúng tôi sử dụng HAVING mệnh đề với SUM() , là một hàm tổng hợp khác có sẵn trong hầu hết các RDBMS chính (xem SQLite SUM() cho một ví dụ khác).

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) > 1000000
ORDER BY CountryCode;

Kết quả:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Luanda          | 2022000      |
| AUS           | New South Wales | 3993949      |
| AUS           | Queensland      | 1805236      |
| AUS           | Victoria        | 2990711      |
| AUS           | West Australia  | 1096829      |
+---------------+-----------------+--------------+

Ví dụ 3 - HAVING với IN Nhà điều hành

Bạn không bị giới hạn chỉ với) Toán tử cho người mới bắt đầu ”> lớn hơn toán tử (> ) khi sử dụng HAVING mệnh đề. Bạn có thể sử dụng cùng các toán tử mà bạn có thể sử dụng với WHERE mệnh đề (chẳng hạn như = , ) Operator for Beginners">< , =) Operator for Beginners">>= , IN , LIKE , v.v.).

Đây là một ví dụ sử dụng IN toán tử để chỉ định một phạm vi giá trị tổng hợp sẽ trả về.

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) IN (2022000, 3993949, 2990711)
ORDER BY CountryCode;

Kết quả:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Luanda          | 2022000      |
| AUS           | New South Wales | 3993949      |
| AUS           | Victoria        | 2990711      |
+---------------+-----------------+--------------+

Ví dụ 4 - HAVING không có GROUP BY Mệnh đề

Mặc dù HAVING thường được sử dụng với GROUP BY mệnh đề, nó cũng có thể được sử dụng mà không có nó. Khi được sử dụng mà không có nó, sẽ có một nhóm tổng hợp, đơn lẻ tiềm ẩn.

Kết quả bạn nhận được có thể phụ thuộc vào DBMS của bạn, nhưng đây là một ví dụ được thực hiện trong SQL Server.

SELECT
    SUM(Population) AS Population
FROM City
HAVING SUM(Population) > 2000000;

Kết quả:

+--------------+
| Population   |
|--------------|
| 1429559884   |
+--------------+

Ví dụ này chỉ trả về tổng dân số của tất cả các thành phố trong bảng.

Đây là những gì sẽ xảy ra nếu chúng ta hoán đổi toán tử lớn hơn (> ) với toán tử nhỏ hơn (< ).

SELECT
    SUM(Population) AS Population
FROM City
HAVING SUM(Population) < 2000000;

Kết quả:

(0 rows affected)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sơ đồ ER trong IRI Workbench

  2. Kiểu dữ liệu SQL VARCHAR Nên và Không nên để Cơ sở dữ liệu Nhanh hơn

  3. Cách kết nối cơ sở dữ liệu với Amazon VPC

  4. Duy trì MAX (hoặc MIN) đang chạy được nhóm lại

  5. Mô hình Mối quan hệ Đảng. Làm thế nào để mô hình hóa các mối quan hệ