PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak pogrupować wyniki według liczby relacji?

Nie mam twoich przykładowych danych, ale właśnie odtworzyłem scenariusz tutaj za pomocą jednej tabeli: Demo

Możesz LEFT JOIN liczniki za pomocą generate_series() i uzyskaj zera za brakującą liczbę n członkostwa. Jeśli nie chcesz zer, po prostu użyj drugiego zapytania.

Zapytanie1

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;

Zapytanie2

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spark SQL 2.0:NullPointerException z prawidłowym zapytaniem PostgreSQL

  2. Zapytanie rekurencyjne używane do zamykania przechodniego

  3. Postgres upsert:rozróżnij wiersze nowe i zaktualizowane

  4. ~~ Operator w Postgresie

  5. Muszę przypisać wszystkie działania w SQL do jednego identyfikatora, ale obecnie każde działanie ma trzy identyfikatory