Я не уверен, какую СУБД или программное обеспечение базы данных вы используете, но вы можете рассмотреть здесь использование CTE или Common Table Expressions.Приведенный ниже метод WITH ... AS не работает с mySQL, но работает в Oracle, SQL Server, MariaDB или чем-то еще.Если вы используете mySQL, мы можем переписать его для правильной работы.
В идеале, вы собираетесь создать две временные таблицы.
- Первая временная таблица будет содержатьрезультаты вашего первого запроса
- Ваша вторая временная таблица будет содержать результаты вашего второго запроса
- Затем мы хотим объединить эти таблицы, чтобывсе, где order_id равен 1 или 2, возвращает общее значение для этого заказа [которое мы вычислили во втором запросе]
- В конечном счете, вы просто хотите выбрать правильные данные
Вот пример кода SQL, который должен работать, если вы не используете mySQL:
WITH firstQuery AS
(
SELECT orders.id, orders.shop_id,
products.price * line_items.quantity as total_value,
line_items.description, line_items.id as lineitem_id,
line_items.order_id, products.price as price,
line_items.product_id, line_items.quantity
from orders
JOIN line_items
ON line_items.order_id = orders.id
JOIN products
ON line_items.product_id = products.id;
),
secondQuery AS
(
SELECT orders.id, orders.shop_id, SUM(products.price) as "total_price",
line_items.description, line_items.id as lineitem_id,
line_items.order_id, products.price as price,
line_items.product_id, line_items.quantity
from orders
JOIN line_items
ON line_items.order_id = orders.id
LEFT JOIN products
ON line_items.product_id = products.id
GROUP BY orders.id;
)
SELECT
firstQuery.*,
total_price
FROM
firstQuery LEFT JOIN secondQuery ON firstQuery.order_id = secondQuery.order_id
Я предлагаю ознакомиться с CTE здесь: Какие из них более производительны, CTE или временные таблицы?
Он чрезвычайно мощный и, безусловно, дает вам невероятные способности, когда дело доходит до данных и аналитики.
Дайте мне знать, если это работает для вас, если нет, мы можем работать через него ииспользуйте CTE по-другому:)
ОБНОВЛЕНИЕ - видел, что вы упоминали, что используете SQLite.Это должно работать там.Вот хороший обзор того, что мы достигаем, используя подзапросы в простом формате: https://www.sqlite.org/lang_with.html