PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment regrouper les résultats par nombre de relations

Je n'ai pas vos exemples de données, mais je viens de recréer le scénario ici avec une seule table : Démo

Vous pouvez LEFT JOIN les comptes avec generate_series() et obtenir des zéros pour le nombre manquant de n adhésions. Si vous ne voulez pas de zéros, utilisez simplement la deuxième requête.

Requête1

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;

Requête2

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;