Tôi không có dữ liệu mẫu của bạn, nhưng tôi chỉ tạo lại tình huống ở đây bằng một bảng duy nhất: Bản trình diễn
Bạn có thể LEFT JOIN
số đếm với generate_series()
và nhận số 0 vì thiếu số lượng n
các thành viên. Nếu bạn không muốn số 0, chỉ cần sử dụng truy vấn thứ hai.
Truy vấn1
WITH c
AS (
SELECT profile_id
,count(*) ct
FROM Table1
GROUP BY profile_id
)
,m
AS (
SELECT MAX(ct) AS max_ct
FROM c
)
SELECT n
,COUNT(c.profile_id)
FROM m
CROSS JOIN generate_series(1, m.max_ct) AS i(n)
LEFT JOIN c ON c.ct = i.n
GROUP BY n
ORDER BY n;
Truy vấn2
WITH c
AS (
SELECT profile_id
,count(*) ct
FROM Table1
GROUP BY profile_id
)
SELECT ct
,COUNT(*)
FROM c
GROUP BY ct
ORDER BY ct;