sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man grupperar resultat efter antal relationer

Jag har inte dina exempeldata, men jag återskapade bara scenariot här med en enda tabell: Demo

Du kan LEFT JOIN räkningarna med generate_series() och få nollor för saknat antal n medlemskap. Om du inte vill ha nollor, använd bara den andra frågan.

Fråga1

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;

Fråga 2

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. Dense_rank första Oracle till Postgresql konvertera

  2. mysql datetime jämförelse

  3. Flernivåmeny från databasposter

  4. Varför ger denna SQL-kod fel 1066 (Inte unik tabell/alias:'användare')?