#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. Вау, это работает. Большое тебе спасибо, Гордон!