Вот один из возможных подходов (ПРИМЕЧАНИЕ: у меня нет доступа к PostgreSQL для проверки синтаксиса, поэтому я представляю здесь своего рода псевдокод без его проверки).
SELECT SUM(UNITS) AS UNITS_SUM ,
SUM(UNIT_PRICE)/POSS_UNITS_COUNT AS AVERAGE_UNIT_PRICE
FROM
(SELECT UNITS AS UNITS ,
CASE WHEN UNITS > 0 THEN 1
ELSE 0
END AS POSS_UNITS_COUNT ,
CASE WHEN UNITS > 0 THEN UNIT_PRICE
ELSE 0
END AS UNIT_PRICE
FROM Your_Table) A ;
Обратите внимание, что это приведет к ошибке DIVIDE BY 0 , если в вашей таблице нет положительной цены (я предполагаю, что такое условие не может существовать; если оно существует, вы должны обусловить деление, используя CASE
, где POSS_UNITS_COUNT должно быть> 0.