Суммируйте данные из объединенной таблицы для указанных c столбцов (oracle 9i) - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть две таблицы:

replies_referred и advert_view_hits

replies_referred содержит много полей, но соответствующие:

ad_id, acc_id and referrer

Advertise_view_hits содержит (sb_id - то же самое, что и acc_id):

ad_id, date, hits, referrer, sb_id, F

Число просмотров рекламного объявления используется для записи просмотров и обращений к рекламным объявлениям, а свойство replies_referred используется для записи ответов на эти рекламные объявления.

Обычно я бы использовал следующий запрос для суммирования количества объявлений, просмотров и кликов по рефереру

select referrer, count(distinct ad_id) as Adverts,
            sum(case f when 'Y' then hits else 0 end) as clicks,
            sum(case f when 'N' then hits else 0 end) as views
            from advert_view_hits
            where ad_id in ('3325371', '3319035', '3318234')
            group by referrer;

, который дает такие результаты, как:

 Referrer             Adverts  Clicks  Views
 Caterer               3       124     74
 Indeed                5       3       24

Но существует несоответствие между двумя таблицами. Ссылки существуют в таблице advert_view_hits, которые не существуют в таблице replies_referred. Поэтому я хочу использовать значения referrer из replies_referred в приведенном выше запросе. Также хотите использовать количество объявлений из таблицы replies_referred.

Но когда я пытаюсь объединить обе таблицы, результаты для кликов и просмотров ошибочны и намного выше, чем должны быть.

select r.referrer, count(distinct r.ad_id) as Adverts,
            sum(case a.f when 'Y' then hits else 0 end) as clicks,
            sum(case a.f when 'N' then hits else 0 end) as views
            from replies_referred r
            join advert_view_hits a on a.ad_id = r.ad_id
            where r.ad_id in ('3325371', '3319035', '3318234')
            group by r.referrer; 

, который дает такие результаты, как:

Referrer             Adverts  Clicks  Views
Caterer               3       5473     49730
Indeed                5       234      111

Я пытался использовать подзапросы для получения кликов и просмотров, но это приводит к ORA-00979: не к ошибкам выражения GROUP BY.

Как мне объединить обе таблицы и правильно суммировать просмотры и клики?

пример данных из advert_view_hits:

enter image description here

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Мне удалось найти этот запрос, который ближе к результатам, которые я ищу, но он невероятно медленный.

   select referrer,
   count(distinct ad_id) as adverts,
   sum(case f when 'Y' then hits else 0 end) as clicks,
   sum(case f when 'N' then hits else 0 end) as views
   from advert_view_hits
   where referrer IN (
        select DISTINCT r.referrer
        from replies_referred r
        where r.ad_id in ('3325371', '3319035', '3318234')
    )
   and ad_id IN ('3325371', '3319035', '3318234')
   group by referrer;
0 голосов
/ 08 апреля 2020

Я думаю, что join условия неправильные. Возможно, вам также необходимо включить учетную запись:

select r.referrer, count(distinct r.ad_id) as Adverts,
        sum(case a.f when 'Y' then hits else 0 end) as clicks,
        sum(case a.f when 'N' then hits else 0 end) as views
from replies_referred r join
     advert_view_hits a 
     on a.ad_id = r.ad_id and a.acc_id = r.sb_id
where r.ad_id in ('3325371', '3319035', '3318234')
group by r.referrer; 
...