подсчитайте количество уникальных пользователей в день, которые вошли в систему как с iphone, так и с Интернета

#sql #postgresql

Вопрос:

Предполагая, что у меня есть 2 таблицы iPhone и Интернет. Это столбцы внутри таблицы

 Iphone: ts / user id / iphone session ID
Web:   ts / user id / web session ID
 

Я хочу, чтобы результат выглядел так

 iphone_user web_user    day
1              0    2021-09-10
1              1    2021-09-12
0              1    2021-09-11
 

Но мой результат выглядит так. Похоже, 11-го числа нет в веб-таблице, и я не могу назвать обе таблицы дат.

 iphone_user web_user    day
    1          0    2021-09-10
    1          1    2021-09-12
    0          1    (null)
 

Это мой текущий код. Любая помощь будет очень признательна.

 SELECT sub.*

FROM ( select count (distinct iphone.user_ID) as Iphone_user, 
      count(distinct web.user_ID) web_user, 
      extract('day' from iphone.ts) as day
      from Iphone  
      FULL OUTER JOIN WEB
      ON Iphone.user_id = Web.User_ID
      and web.ts = iphone.ts
      group by day
     ) sub
 

Ответ №1:

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

 select cleaned_ate, sum(is_iphone) as iphone, sum(is_web) as web
from ((select distinct user_id, 1 as is_iphone, 0 as is_web, cleaned_time::date as cleaned_date
       from iphone
      ) union all
      (select distinct user_id, 0 as is_iphone, 1 as is_web, cleaned_time::date as cleaned_date
       from web
      )
     ) iw
group by cleaned_date;

  
 

Комментарии:

1. Вау, это работает. Большое тебе спасибо, Гордон!