Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite HAVING
để chỉ định điều kiện lọc cho một nhóm hoặc một tổng hợp.
Giới thiệu về SQLite HAVING
mệnh đề
SQLite HAVING
mệnh đề là một mệnh đề tùy chọn của SELECT
tuyên bố. HAVING
mệnh đề chỉ định điều kiện tìm kiếm cho một nhóm.
Bạn thường sử dụng HAVING
mệnh đề với GROUP BY
mệnh đề. GROUP BY
mệnh đề nhóm một tập hợp các hàng thành một tập hợp các hàng hoặc nhóm tóm tắt. Sau đó, HAVING
mệnh đề lọc các nhóm dựa trên một điều kiện cụ thể.
Nếu bạn sử dụng HAVING
, bạn phải bao gồm GROUP BY
mệnh đề; nếu không, bạn sẽ gặp lỗi sau:
Error: a GROUP BY clause is required before HAVING
Code language: JavaScript (javascript)
Lưu ý rằng HAVING
mệnh đề được áp dụng sau GROUP BY
mệnh đề, trong khi WHERE
mệnh đề được áp dụng trước GROUP BY
mệnh đề.
Phần sau minh họa cú pháp của HAVING
mệnh đề:
SELECT
column_1,
column_2,
aggregate_function (column_3)
FROM
table
GROUP BY
column_1,
column_2
HAVING
search_condition;
Code language: SQL (Structured Query Language) (sql)
Trong cú pháp này, HAVING
mệnh đề đánh giá search_condition
cho mỗi nhóm dưới dạng biểu thức Boolean. Nó chỉ bao gồm một nhóm trong tập hợp kết quả cuối cùng nếu đánh giá là đúng.
SQLite HAVING
ví dụ mệnh đề
Chúng tôi sẽ sử dụng tracks
trong cơ sở dữ liệu mẫu để trình diễn.
Để tìm số lượng bản nhạc cho mỗi album, bạn sử dụng GROUP BY
mệnh đề như sau:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Để tìm số lượng bản nhạc cho album có id 1, chúng tôi thêm HAVING
mệnh đề cho câu lệnh sau:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
HAVING albumid = 1;
Hãy thử nó
Chúng tôi đã tham khảo AlbumId
trong cột HAVING
mệnh đề.
Để tìm các album có số lượng bản nhạc từ 18 đến 20, bạn sử dụng hàm tổng hợp trong HAVING
mệnh đề như thể hiện trong câu lệnh sau:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
HAVING
COUNT(albumid) BETWEEN 18 AND 20
ORDER BY albumid;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
SQLite HAVING
mệnh đề với INNER JOIN
ví dụ
Câu lệnh sau truy vấn dữ liệu từ tracks
và albums
các bảng sử dụng liên kết bên trong để tìm các anbom có tổng thời lượng lớn hơn 60.000.000 mili giây.
SELECT
tracks.AlbumId,
title,
SUM(Milliseconds) AS length
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.AlbumId
GROUP BY
tracks.AlbumId
HAVING
length > 60000000;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Trong hướng dẫn này, bạn đã học cách sử dụng SQLite HAVING
để chỉ định điều kiện tìm kiếm cho các nhóm.