PostgreSQL: подзапросы и агрегатные функции (сумма) - PullRequest
0 голосов
/ 28 декабря 2018

Я пытался обратиться к другим вопросам;Я сделал вывод, что подзапросы не могут использоваться в агрегатных функциях, но я не могу решить этот вариант использования.

Tables:  
1. CustomerInfo(c_id,name)  
2. ProductInfo(p_id,price)  
3. ModelInfo(p_id,m_id,name)  
4. PurchaseRecords(c_id,m_id,quantity)

Требуемый результат:
Список имен клиентов с общей суммой, купленной каждым клиентом.

Мой поток мыслей таков:
Свяжите PurchaseRecords с ModelInfo, чтобы получить p_id,
ModelInfo с ProductInfo, чтобы получить цену,
Умножьте цену, возвращаемую количеством в PurchaseRecords для каждогоконкретный клиент,
, который требует, чтобы я в конце концов связал CustomerInfo, чтобы получить имя.

Я использую Postgres.Я мог бы написать программу для этого на Java, но мне трудно делать это с SQL.Итак, каков правильный запрос здесь?Любые указатели о том, как решать проблемы, приветствуются!

1 Ответ

0 голосов
/ 28 декабря 2018
SELECT
  c.name as customer_name,
  sum(coalesce(p.price, 0) * coalesce(pr.quantity, 0)) as amount_purchased
from
  CustomerInfo c
  left join PurchaseRecords pr on c.c_id = pr.c_id
  left join ModelInfo mi on mi.m_id = pr.m_id
  left join ProductInfo p on p.p_id = mi.p_id
group by
  c.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...