Извлечение заказов
SELECT orders.id, orders.number
FROM orders;
id | number
----+--------
1 | 30
2 | 50
3 | 10
4 | 10
Извлечение цен, связанных с заказами
SELECT orders.id, orders.number, products.prices
FROM orders
LEFT JOIN products ON orders.id = products.order_id;
id | number | prices
----+--------+--------
1 | 30 |
2 | 50 | 20
3 | 10 | 11
4 | 10 |
Извлечение цен, связанных с заказами, а также с товарами без заказа
SELECT orders.id, orders.number, products.prices
FROM orders
FULL JOIN products ON orders.id = products.order_id;
id | number | prices
----+--------+--------
1 | 30 |
2 | 50 | 20
3 | 10 | 11
| | 40
4 | 10 |
Суммируйте цены без какого-либо заказа.Мы не видим здесь никакой разницы, поскольку существует только один продукт, с которым не связан ни один заказ (тот, где order_id
равен нулю), но вы запросили сумму этих цен, так что вы идете: -)
SELECT orders.id, orders.number, SUM(products.prices) AS prices
FROM orders
FULL JOIN products ON orders.id = products.order_id
GROUP BY orders.id, orders.number;
id | number | prices
----+--------+--------
1 | 30 |
2 | 50 | 20
3 | 10 | 11
| | 40
4 | 10 |
Используйте нулевую (0) метку и заказывайте по номеру
SELECT
coalesce(orders.id::varchar(255), 'null(0)') AS id,
coalesce(orders.number::varchar(255), 'null(0)') AS number,
SUM(products.prices) AS prices
FROM orders
FULL JOIN products ON orders.id = products.order_id
GROUP BY orders.id, orders.number
ORDER BY id;
id | number | prices
---------+---------+--------
1 | 30 |
2 | 50 | 20
3 | 10 | 11
4 | 10 |
null(0) | null(0) | 40