PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So gruppieren Sie Ergebnisse nach der Anzahl der Beziehungen

Ich habe Ihre Beispieldaten nicht, aber ich habe das Szenario hier mit einer einzigen Tabelle neu erstellt: Demo

Sie könnten LEFT JOIN die zählt mit generate_series() und erhalten Nullen für fehlende Anzahl von n Mitgliedschaften. Wenn Sie keine Nullen wollen, verwenden Sie einfach die zweite Abfrage.

Abfrage1

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;

Abfrage2

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;