sql >> Database >  >> RDS >> PostgreSQL

Resultaten groeperen op aantal relaties

Ik heb uw voorbeeldgegevens niet, maar ik heb het scenario hier opnieuw gemaakt met een enkele tabel: Demo

U kunt LEFT JOIN de tellingen met generate_series() en krijg nullen voor ontbrekende telling van n lidmaatschappen. Als u geen nullen wilt, gebruikt u gewoon de tweede query.

Query1

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;

Query2

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. SELECTEER * VAN mensen WAAR user_id='$user_id' ORDER OP tijd GROEP OP achternaam

  2. Hoe werkt SQL-injection en hoe bescherm ik me ertegen

  3. OracleParameter en IN-clausule

  4. Moet ik een tabel ontwerpen met een primaire sleutel van varchar of int?