SQL Select: как умножить столбец на количество идентификаторов - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующая (здесь упрощенная) база данных, и я хочу получить месяц с самым высоким доходом.

счета
- идентификатор
- идентификатор заказа
- выдано (отметка времени)

заказы
- идентификатор

orderItems
- id
- идентификатор_ заказа
- article_id

статьи
- id
- цена

Пока я получил следующее утверждение:

Select articles.price * orderItems.order_id as revenue, Extract(month 
from invoices.issued) 
FROM orderItems
INNER JOIN articles ON orderItems.article_id = articles.id
Inner JOIN orders ON orderItems.order_id = orders.id
Inner JOIN invoices ON orders.id = invoices.order_id
GROUP BY year(issued), month(issued)
Order by revenue DESC Limit 1

Расчетный доход неверен, так как цена умножена на order_id, но должна быть фактически умножена на количество соответствующих order_id.Я пытался реализовать count (orderItems.order_id), но он не работает.Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Я думаю, вы хотите:

SELECT year(i.issued), month(i.issued), SUM(a.price) as revenue, 
FROM orderItems oi JOIN
     articles a
     ON oi.article_id = a.id JOIN
     orders o
     ON oi.order_id = o.id JOIN
     invoices i
     ON o.id = i.order_id
GROUP BY year(i.issued), month(i.issued)
ORDER BY revenue DESC
LIMIT 1;

Другими словами, это простой запрос агрегации.Нет необходимости - когда-либо - умножать на orderid.Также обратите внимание, что в этом запросе вводятся псевдонимы таблиц, что упрощает написание и чтение запроса.

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