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

Cách nhóm kết quả theo số lượng các mối quan hệ

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django với Postgresql, cột phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

  2. Cách tạo SUM mà không cần nhóm theo

  3. Vấn đề về hiệu suất trong truy vấn cập nhật

  4. Làm cách nào để thay thế một bảng trong Postgres?

  5. Chuyển đổi giữa các múi giờ trong Postgres