PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвате SQL прозоречна функция за изчисляване на процент от агрегат

Мисля, че търсите това:

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

Получава искания резултат.

Функциите на прозореца се прилагат след агрегатни функции. Външният sum() в sum(sum(v)) OVER ... е прозоречна функция (прикачена OVER ... клауза), докато вътрешната sum() е агрегатна функция.

Ефективно същото като:

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;

Или (без 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;

Или вариантът на @Mu.

Настрана:Greenplum въведе корелирани подзаявки с версия 4.2. Вижте бележките по изданието.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgDash Diagnostics Алтернативи - PostgreSQL управление на заявки с ClusterControl

  2. Относно клъстерирания индекс в postgres

  3. Как да добавите таймаут на заявка в Typeorm/Typescript?

  4. Премахване на нов ред от php json изход

  5. Инсталацията на PostGIS Homebrew препраща към стар път?