Как я могу показать суммы и количество заказов для внутренних и внешних заказов отдельно для каждой страны клиента?

У меня есть 2 запроса, и я хочу объединить их в 5 столбцов, таких как Country_name - count_of_orders_for_domestic - sums_for_domectic - count_of_orders_for_non_domestic - sums_for_non_domestic

внутренний подсчет заказов и сумм

SELECT co.name country,
       count(cu.id) domestic_orders,
       sum(o.price) domastic_sum
FROM countries co
JOIN cities c ON co.id=c.country_id
JOIN customers cu ON c.id=cu.city_id
JOIN orders o ON cu.id=o.customer_id
JOIN products AS p ON o.product_id=p.id
WHERE p.country_id=co.id
GROUP BY co.name

не внутренний подсчет заказов и сумм

SELECT co1.name country,
       count(cu1.id) non_domestic_orders,
       sum(o1.price) non_domastic_sum
FROM countries co1
JOIN cities c1 ON co1.id=c1.country_id
JOIN customers cu1 ON c1.id=cu1.city_id
JOIN orders o1 ON cu1.id=o1.customer_id
JOIN products AS p1 ON o1.product_id=p1.id
WHERE p1.country_id<>co1.id
GROUP BY co1.name

Я пробую Union, но он составляет 3 столбца, и я не вижу разницы между внутренним и иностранным. Затем я пытаюсь создать новый псевдоним, но у меня возникают проблемы с операциями подсчета и суммирования.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать отфильтрованную агрегацию:

SELECT co.name as country,
       count(cu.id) filter (where p.country_id = co.id) as domestic_orders,
       sum(o.price) filter (where p.country_id = co.id) as domastic_sum,
       count(cu.id) filter (where p.country_id <> co.id) as non_domestic_orders,
       sum(o.price) filter (where p.country_id <> co.id) as non_domastic_sum
FROM countries co
  JOIN cities c ON co.id=c.country_id
  JOIN customers cu ON c.id=cu.city_id
  JOIN orders o ON cu.id=o.customer_id
  JOIN products AS p ON o.product_id=p.id
GROUP BY co.name

Большое спасибо !!!!!! Ты сделал мой день!!!!!!!!!!

Serhiy Tarasuik 22.03.2022 10:36

@SerhiyTarasuik Если этот ответ решил ваш вопрос, пожалуйста, принимать, чтобы ваш вопрос был помечен как решенный.

a_horse_with_no_name 24.03.2022 10:07

Другие вопросы по теме