Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite GROUP BY mệnh đề để tạo một tập hợp các hàng tóm tắt từ một tập hợp các hàng.
Giới thiệu về SQLite GROUP BY mệnh đề
GROUP BY mệnh đề là một mệnh đề tùy chọn của SELECT tuyên bố. GROUP BY mệnh đề một nhóm hàng đã chọn thành các hàng tóm tắt theo giá trị của một hoặc nhiều cột.
GROUP BY mệnh đề trả về một hàng cho mỗi nhóm. Đối với mỗi nhóm, bạn có thể áp dụng một hàm tổng hợp, chẳng hạn như MIN , MAX , SUM , COUNT hoặc AVG để cung cấp thêm thông tin về từng nhóm.
Câu lệnh sau minh họa cú pháp của SQLite GROUP BY mệnh đề.
SELECT
column_1,
aggregate_function(column_2)
FROM
table
GROUP BY
column_1,
column_2;
Code language: SQL (Structured Query Language) (sql) Hãy thử nó
GROUP BY mệnh đề đứng sau FROM mệnh đề của SELECT tuyên bố. Trong trường hợp một câu lệnh chứa WHERE mệnh đề GROUP BY mệnh đề phải đứng sau WHERE mệnh đề.
Theo dõi GROUP BY mệnh đề là một cột hoặc danh sách các cột được phân tách bằng dấu phẩy được sử dụng để chỉ định nhóm.
SQLite GROUP BY ví dụ
Chúng tôi sử dụng tracks bảng từ cơ sở dữ liệu mẫu cho cuộc trình diễn.
SQLite GROUP BY mệnh đề với COUNT chức năng
Câu lệnh sau trả về id album và số lượng bản nhạc trên mỗi album. Nó sử dụng GROUP BY mệnh đề nhóm các bản nhạc theo album và áp dụng COUNT() chức năng cho từng nhóm.
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
Bạn có thể sử dụng ORDER BY mệnh đề sắp xếp các nhóm như sau:
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
ORDER BY COUNT(trackid) DESC;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite GROUP BY và INNER JOIN mệnh đề
Bạn có thể truy vấn dữ liệu từ nhiều bảng bằng INNER JOIN , sau đó sử dụng GROUP BY mệnh đề để nhóm các hàng thành một tập hợp các hàng tóm tắt.
Ví dụ:câu lệnh sau kết hợp các tracks bảng với albums để lấy tiêu đề của album và sử dụng GROUP BY mệnh đề với COUNT để lấy số lượng bản nhạc trên mỗi album.
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite GROUP BY với HAVING mệnh đề
Để lọc các nhóm, bạn sử dụng GROUP BY với HAVING mệnh đề. Ví dụ:để nhận các album có hơn 15 bản nhạc, bạn sử dụng câu lệnh sau:
SELECT
tracks.albumid,
title,
COUNT(trackid)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid
HAVING COUNT(trackid) > 15;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite GROUP BY mệnh đề với SUM ví dụ về hàm
Bạn có thể sử dụng SUM hàm để tính tổng mỗi nhóm. Ví dụ:để nhận tổng độ dài và byte cho mỗi album, bạn sử dụng SUM hàm để tính tổng số mili giây và byte.
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite GROUP BY với MAX , MIN và AVG chức năng
Câu lệnh sau trả về id album, tiêu đề album, độ dài tối đa, độ dài tối thiểu và độ dài trung bình của các bản nhạc trong tracks bảng.
SELECT
tracks.albumid,
title,
min(milliseconds),
max(milliseconds),
round(avg(milliseconds),2)
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite GROUP BY ví dụ về nhiều cột
Trong ví dụ trước, chúng tôi đã sử dụng một cột trong GROUP BY mệnh đề. SQLite cho phép bạn nhóm các hàng theo nhiều cột.
Ví dụ:để nhóm các bản nhạc theo loại phương tiện và thể loại, bạn sử dụng câu lệnh sau:
SELECT
MediaTypeId,
GenreId,
COUNT(TrackId)
FROM
tracks
GROUP BY
MediaTypeId,
GenreId;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
SQLite sử dụng kết hợp các giá trị của MediaTypeId và GenreId các cột dưới dạng một nhóm, ví dụ:(1,1) và (1,2). Sau đó, nó áp dụng COUNT chức năng trả về số lượng bản nhạc trong mỗi nhóm.
SQLite GROUP BY ví dụ về ngày tháng
Xem bảng hóa đơn sau từ cơ sở dữ liệu mẫu:
Câu lệnh sau trả về số lượng hóa đơn theo năm.
SELECT
STRFTIME('%Y', InvoiceDate) InvoiceYear,
COUNT(InvoiceId) InvoiceCount
FROM
invoices
GROUP BY
STRFTIME('%Y', InvoiceDate)
ORDER BY
InvoiceYear;Code language: SQL (Structured Query Language) (sql) Đây là kết quả:
Trong ví dụ này:
- Hàm
STRFTIME('%Y', InvoiceDate)trả về một năm từ một chuỗi ngày. -
GROUP BYđiều khoản nhóm các hóa đơn theo năm. - Hàm
COUNT()trả về số lượng hóa đơn trong mỗi năm (hoặc nhóm).
Trong hướng dẫn này, bạn đã học cách sử dụng SQLite GROUP BY mệnh đề để nhóm các hàng thành một tập hợp các hàng tóm tắt.