Nếu bạn cần thêm cột "đếm" vào tập kết quả của truy vấn cơ sở dữ liệu khi sử dụng SQLite, bạn có thể sử dụng count()
hàm cung cấp số lượng và GROUP BY
để chỉ định cột để nhóm kết quả.
Ví dụ
Dưới đây là một ví dụ nhanh để chứng minh.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Kết quả:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
Trong trường hợp này, ID của từng nghệ sĩ được liệt kê trong ArtistId và số lượng album của nghệ sĩ đó được liệt kê trong số lượng (Tiêu đề) cột.
Để làm cho điều này dễ đọc hơn một chút, đây là một truy vấn tương tự, nhưng lần này tôi trả lại tên của nghệ sĩ thay vì ID. Tôi làm điều này bằng cách thực hiện kết hợp bên trong với Nghệ sĩ bảng.
Trong trường hợp này, tôi thêm WHERE
mệnh đề chỉ trả lại những nghệ sĩ bắt đầu bằng chữ cái D .
SELECT
ar.Name,
count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name;
Kết quả:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Sắp xếp theo số lượng ()
Chúng tôi có thể sửa đổi điều này một chút để tập kết quả được sắp xếp theo số lượng. Nói cách khác, chúng tôi có thể sắp xếp thứ tự sao cho những nghệ sĩ có nhiều album nhất được liệt kê đầu tiên và ngược lại.
SELECT
ar.Name,
count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY count(al.Title) DESC;
Kết quả:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Trên thực tế, chúng ta có thể tiến thêm một bước nữa và thêm bí danh cho count()
. Điều này sẽ giúp chúng tôi không phải sao chép nó trong ORDER BY
mệnh đề.
SELECT
ar.Name,
count(al.Title) AS AlbumCount
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY AlbumCount DESC;
Kết quả:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1