Предположим, есть таблица фигур:
CREATE TABLE fig(
id BIGINT PRIMARY KEY,
title VARCHAR
)
Таблица вершин:
CREATE TABLE vertex(
id BIGINT PRIMARY KEY,
fig_id BIGINT,
vertex_cost INTEGER -- стоимость - некое свойство вершины
)
Таблица сторон:
CREATE TABLE edge (
id BIGINT PRIMARY KEY,
fig_id BIGINT,
edge_cost INTEGER -- стоимость - некое свойство грани
)
Вопрос 1:
Можно ли
без вложенных запросов получить список фигур и для каждой фигуры сумму стоимостей ее вершин и сумму стоимостей граней?
С помощью вложенных запросов задачу можно решить так:
-- пример правильного, но не удовлетворяющего основному условию задачи, решения:
SELECT
fig.*,
(SELECT SUM(vertex_cost) FROM vertex WHERE vertex.fig_id = fig.id) vertex_sum,
(SELECT SUM(edge_cost) FROM edge WHERE edge.fig_id = fig.id) edge_sum
FROM fig
Вопрос 2 (со звездочкой):
Можно ли
без вложенных запросов получить список фигур и для каждой фигуры сумму стоимостей ее вершин и сумму стоимостей граней, а также минимальные и максимальные стоимости?
С помощью вложенных запросов задачу можно решить так:
-- пример правильного, но не удовлетворяющего основному условию задачи, решения:
SELECT
fig.*,
(SELECT SUM(vertex_cost) FROM vertex WHERE vertex.fig_id = fig.id) vertex_sum,
(SELECT SUM(edge_cost) FROM edge WHERE edge.fig_id = fig.id) edge_sum,
(SELECT MIN(vertex_cost) FROM vertex WHERE vertex.fig_id = fig.id) vertex_min,
(SELECT MIN(edge_cost) FROM edge WHERE edge.fig_id = fig.id) edge_min,
(SELECT MAX(vertex_cost) FROM vertex WHERE vertex.fig_id = fig.id) vertex_max,
(SELECT MAX(edge_cost) FROM edge WHERE edge.fig_id = fig.id) edge_max
FROM fig