sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat funkci okna SQL k výpočtu procenta agregace

Myslím, že hledáte toto:

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

Vytvoří požadovaný výsledek.

Funkce okna se použijí po agregační funkce. Vnější sum() v sum(sum(v)) OVER ... je funkce okna (připojená OVER ... klauzule), zatímco vnitřní sum() je agregační funkce.

Účinně stejné jako:

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;

Nebo (bez 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;

Nebo varianta @Mu.

Stranou:Greenplum zavedl korelované poddotazy s verzí 4.2. Viz poznámky k vydání.



  1. Varování PHP při spuštění při pokusu o načtení php_oci8.dll

  2. Moje databáze PostgreSQL je nedostatek místa na disku

  3. Jak vytvořit FULLTEXTOVÝ index na více sloupcích?

  4. Jak přidat pozice řádků v SQL pomocí RANK()