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

Cara menggunakan fungsi jendela SQL untuk menghitung persentase agregat

Saya pikir Anda sedang mencari ini:

SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
FROM   test
GROUP  BY d1, d2;

Menghasilkan hasil yang diminta.

Fungsi jendela diterapkan setelah fungsi agregat. sum() outer bagian luar di sum(sum(v)) OVER ... adalah fungsi jendela (terlampir OVER ... klausa) sedangkan bagian dalam sum() adalah fungsi agregat.

Secara efektif sama dengan:

WITH x AS (
   SELECT d1, d2, sum(v) AS sv
   FROM   test
   GROUP  BY d1, d2
   )
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM   x;

Atau (tanpa CTE):

SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM  (
   SELECT d1, d2, sum(v) AS sv
   FROM   test
   GROUP  BY d1, d2
   ) x;

Atau varian @Mu.

Selain:Greenplum memperkenalkan subquery yang berkorelasi dengan versi 4.2. Lihat catatan rilis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GALAT:lebih dari satu urutan yang dimiliki ditemukan di Postgres

  2. Bagaimana saya bisa membuat kueri SQL jarak-geo ini kompatibel dengan Postgres

  3. bagaimana cara melakukan kurang dari atau sama dengan dan lebih besar dari sama dengan di filter Django?

  4. Perbaiki "INSERT memiliki lebih banyak ekspresi daripada kolom target" di PostgreSQL

  5. PostgreSQL - pengelompokan berdasarkan kolom jsonb