Выберите сумму и среднее из таблицы с другим условием - PullRequest
0 голосов
/ 02 мая 2020

У меня есть таблица PostgreSQL, как показано на скриншоте

Products table

Я хочу получить следующие данные в том же запросе

  • Сумма всех юнитов
  • Среднее значение всех юнитов_цены только там, где юниты> 0

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Я бы просто использовал условную агрегацию. В Postgres, который использует filter:

select sum(units),
       avg(unit_price) filter (where units > 0)
from t;
0 голосов
/ 02 мая 2020

Вот один из возможных подходов (ПРИМЕЧАНИЕ: у меня нет доступа к 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...