Как объединить два запроса, сохранив «Город» в качестве общего фильтра для первого столбца - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь объединить эти два отдельных запроса. Каждый из них по-своему работает. Один для 2019 года, а другой для 2018 года. Я пытаюсь получить всего 7 столбцов. Первый - «город», в котором оба запроса совместно используют, а затем еще 6 столбцов (3 для 2019 и 3 для 2018). Спасибо за вашу помощь!

Я пытался использовать объединение и объединение, но я считаю, что мой синтаксис отключен

select  coalesce(city, 'Total') as "City", 
    sum(reservations.number_of_nights) as "2019 AAA",
    sum(reservations.accommodation_fare+reservations.cleaning_fee)/sum(reservations.number_of_nights) as "2019 BBB",
    sum(reservations.accommodation_fare+reservations.cleaning_fee) as "2019 CCC"
    from reservations
        join listings on reservations.listings_id = listings.id
        where status = 'YYYY' 
        and city <> 'XXXX'
        and reservations.deleted_at is null
            group by rollup(city)
            order by city asc;



select  coalesce(city, 'Total') as "City", 
    sum(reservations.number_of_nights) as "2018 AAA",
    sum(reservations.accommodation_fare+reservations.cleaning_fee)/sum(reservations.number_of_nights) as "2018 BBB",
    sum(reservations.accommodation_fare+reservations.cleaning_fee) as "2018 CCC"
    from reservations
        join listings on reservations.listings_id = listings.id
        where guesty_status = 'YYYY' 
        and city <> 'XXXX'
        and reservations.deleted_at is null
            group by rollup(city)
            order by city asc;

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Таким образом, два запроса по сути одинаковы, за исключением того, что у одного есть данные за 2018 г., а у другого есть данные за 2019. Я бы предложил добавить год в виде столбца (и удалить год из существующих имен столбцов), а затем выполнить СОЮЗ ВСЕХ, чтобы присоединиться к ним.

SELECT [City], 2018 as [Year of Data], [AAA], [BBB], [CCC]
FROM ...  -- finish this with the 2018 query stuff.

UNION ALL

SELECT [City], 2019 as [Year of Data], [AAA], [BBB], [CCC]
FROM ...  -- finish this with the 2019 query stuff.

Теперь я подозреваю, что эти два запроса могут быть переписаны как один запрос, но, поскольку я фактически не вижу никакой разницы в этих двух запросах, кроме искусственного именования столбцов ([2018 AAA] против [2019 AAA]) Я не могу быть уверен, что вы не запускаете этот запрос для двух отдельных баз данных; один для 2018 года и один для 2019 года.

0 голосов
/ 30 мая 2019

Один из способов - использовать каждый запрос в качестве производной таблицы:

select 
    City, 
    [2019 AAA], 
    [2019 BBB], 
    [2019 CCC], 
    [2018 AAA], 
    [2018 BBB], 
    [2018 CCC]
from (

    select  coalesce(city, 'Total') as [City], 
        sum(reservations.number_of_nights) as [2019 AAA],
        sum(reservations.accommodation_fare+reservations.cleaning_fee)/sum(reservations.number_of_nights) as [2019 BBB],
        sum(reservations.accommodation_fare+reservations.cleaning_fee) as [2019 CCC]
        from reservations
            join listings on reservations.listings_id = listings.id
            where status = 'YYYY' 
            and city <> 'XXXX'
            and reservations.deleted_at is null
                group by rollup(city)
    ) as t2019
join (
    select  coalesce(city, 'Total') as [City], 
        sum(reservations.number_of_nights) as [2018 AAA],
        sum(reservations.accommodation_fare+reservations.cleaning_fee)/sum(reservations.number_of_nights) as [2018 BBB],
        sum(reservations.accommodation_fare+reservations.cleaning_fee) as [2018 CCC]
        from reservations
            join listings on reservations.listings_id = listings.id
            where guesty_status = 'YYYY' 
            and city <> 'XXXX'
            and reservations.deleted_at is null
                group by rollup(city)
) as t2018
on t2018.City = t2019.City
order by City;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...