@Ekaterin2020

Почему при объеденении второй запрос отрабатывает некорректно?

Здравствуйте. запрос

(Select c.id, Count(s.email) as kol1
From campaigns c
Left Join subscribers s on c.id = s.campaigns_id
And s.created_on between '2020-10-15' and '2020-11-01'
group by c.id)

union

(Select c1.id, Count(cd.email) as kol2
From campaigns c1
Left Join subscribers_deleted cd on c1.id = cd.campaigns_id
And cd.created_on between '2020-10-15' and '2020-11-01'
group by c1.id)

По отдельности оба запроса отрабатывают правильно, а при объеденении второй запрос не срабатывет левое объеденение, т.е он выводит список не всех ID в левой таблице а только тех у кого есть соответствие в правой и unit не обьединяет все в 3 колонки, а выводит результаты запросов один за другим

(вообще задача сложить поля kol1 и kol2, но это я совсем пока не поняла как делать, хотябы в 3 колонки вывести и в exel cложу по формуле , их хотябы выстроить в 3 колонки значении)
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Вы не правильно понимаете для чего и как предназначен union.
Судя по всему вы хотели добиться чего-то такого:
SELECT
    c.id,
    Count(s.email) as kol1,
    Count(cd.email) as kol2,
    Count(s.email) + Count(cd.email) as summa
From 
    campaigns c
    Left Join subscribers s on 
        c.id = s.campaigns_id
        And s.created_on between '2020-10-15' and '2020-11-01'
    Left Join subscribers_deleted cd on 
        c.id = cd.campaigns_id
        And cd.created_on between '2020-10-15' and '2020-11-01'
group by c.id

Но я бы делал так:
SELECT
    c.id,
    (SELECT Count(s.email) FROM subscribers s WHERE 
        c.id = s.campaigns_id And s.created_on between '2020-10-15' and '2020-11-01'
    ) as kol1,
    (SELECT Count(cd.email) FROM subscribers_deleted cd WHERE
        c.id = cd.campaigns_id And cd.created_on between '2020-10-15' and '2020-11-01'
    ) as kol2
From campaigns c

Запросы не проверял. могут быть опечатки.
Если сразу нужна тольео сумма -- суммируйте. Если нужна и сумма и поотдельности, то можно сделать подзапрос через WITH
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ekaterin2020 Автор вопроса
Спасибо! Все получилось, я правда не поняла как во втором вашем варианте можно суммировать, но и в первом все ок. Я действительно уже почти ничего не помню, буду заниматься. Когда-то я училась на sql-ex может сейчас что-то удобнее появилось?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы