Изобщо не се нуждаете от импортиране на конкретна функция. Postgresql еквивалент, използващ прозорец SUM
:
SELECT ID, стойност, 1,0 * стойност / NULLIF(SUM(val) OVER(),0) AS ratio_to_reportFROM раздел
Изход:
╔═════╦══════╦═════════════════════╗║ id съотношение ║ _report ║ стойност ╠ ═════╬══════╬═════════════════════╣║ 1 ║ 10 ║ 0.166666666666666666 ║║ 2 ║ 10 ║ 0.16666666666666666 ║║ 3 ║ 20 ║ 0.3333333333333333 ║║ 4 ║ 20 ║ 0.333333333333333 ║╚═════╩══════╩═════════════════════╝ <код>
За симулиране на PARTITION BY
можете да използвате:
ИЗБЕРЕТЕ ID, стойност, категория, 1.0 * стойност / NULLIF(SUM(val) OVER(PARTITION BY category),0) AS ratio_to_reportFROM раздел
Изход:
<предварителен код>╔═════╦══════╦═══════════╦════════════════ ║ ID ║ Вал ║ Категория ║ съотношение_to_report ║╠═════╬══════╬═══════════╬═══════════════ ══╣║ 1 ║ 10 ║ A ║ 0,25 ║║ 2 ║ 10 ║ A ║ 0,25 ║║ 3 ║ 20 ║ A ║ 0,5 ║║ 4 ║ 20 ║ B ║ 1 ║╚═════╩════ ══╩═══════════╩═════════════════╝