sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan grupperes resultater efter antal relationer

Jeg har ikke dine eksempeldata, men jeg har lige genskabt scenariet her med en enkelt tabel : Demo

Du kan LEFT JOIN tæller med generate_series() og få nuller for manglende antal n medlemskaber. Hvis du ikke vil have nuller, skal du blot bruge den anden forespørgsel.

Forespørgsel1

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;

Forespørgsel2

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. Få adgang nægtet fejl ved udførelse af mysql_query i php

  2. Eliminer og reducer overlappende datointervaller

  3. Vil du bruge webservice med PL/SQL:UTL_DBWS eller APEX_WEB_SERVICE?

  4. Oracle Update fra Select - samme tabel