Объедините эти запросы
Мне нужно представление, которое объединяет несколько запросов. Что-то типа
SELECT
products.id AS id
FROM products
SELECT
publications.visible AS online_visible
FROM products
INNER JOIN publications ON publications.product_id = products.id
WHERE publication.name = 'online'
SELECT
publications.visible AS retail_visible
FROM products
INNER JOIN publications ON publications.product_id = products.id
WHERE publication.name = 'retail'
SELECT
SUM(sales.quantity) AS year_sales
FROM products
LEFT OUTER JOIN sales ON sales.product_id = products.id
WHERE sales.date > current_date - interval '365' day
GROUP BY products.id
SELECT
SUM(sales.quantity) AS month_sales
FROM products
LEFT OUTER JOIN sales ON sales.product_id = products.id
WHERE sales.date > current_date - interval '30' day
GROUP BY products.id
Желаемый конечный результат
В конце концов, я хочу, чтобы таблица выглядела как
| ID |online_visible|retail_visible|month_sales|year_sales|
|----|--------------|--------------|-----------|----------|
| 1 | false | true | 35 | 420 |
Гивенс
- Я протестировал каждый из запросов по отдельности, поэтому я знаю, что каждый из них работает.
- Вы, вероятно, можете предположить, что любая опечатка здесь вызвана моей попыткой упростить мой вопрос и не является причиной моей проблемы.
- Вероятно, мой вопрос уже задавали раньше, но я недостаточно знаю SQL, чтобы задать правильный вопрос.
Что я пробовал
Я пробовал несколько комбинаций, в которых я использую UNION или UNION ALL для объединения запросов.
В сочетании с тем, что я сделал, каждый SELECT включает все остальные SELECT, но с нулевыми значениями. Как это
SELECT
products.id AS id,
null::boolean AS online_visible,
null::boolean AS retail_visible,
null:int AS month_sales,
null:int AS year_sales
FROM products
и аналогично для остальных