PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengelompokkan hasil berdasarkan jumlah hubungan

Saya tidak memiliki data sampel Anda, tetapi saya baru saja membuat ulang skenario di sini dengan satu tabel: Demo

Anda dapat LEFT JOIN hitungan dengan generate_series() dan dapatkan nol untuk jumlah n yang hilang keanggotaan. Jika Anda tidak ingin nol, gunakan saja kueri kedua.

Kueri1

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;

Kueri2

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. Apakah drop database harus dilakukan bukan dalam transaksi?

  2. postgres - tidak dapat menjatuhkan basis data menggunakan psycopg2

  3. Di pg_restore, bagaimana Anda bisa menggunakan string koneksi postgres untuk menentukan Host/database/nama pengguna/kata sandi?

  4. Apa argumen kedua dalam fungsi array_length()?

  5. RPAD() Fungsi di PostgreSQL