# #sql #google-bigquery
Вопрос:
Я пытаюсь объединить два запроса СЛЕВА, которые группируются по идентификатору пользователя из двух таблиц, которые выглядят следующим образом:
t1: number_of_user_sessions
идентификатор пользователя |
---|
Джон |
Джон |
Брайан |
t1: количество поисков
идентификатор пользователя |
---|
Джон |
Брайан |
Брайан |
Брайан |
с возвращением запроса
идентификатор пользователя | number_of_user_sessions | число поисков |
---|---|---|
Джон | 2 | 1 |
Брайан | 1 | 3 |
SELECT user_id , COUNT( user_id ) as num_sessions FROM t1
LEFT JOIN (
SELECT user_id, COUNT(user_id) as num_search FROM t2
ON t1.user_pseudo_id = t2.user_pseudo_id
GROUP BY user_id ORDER BY COUNT(user_id) DESC
но продолжайте попадать в SELECT list expression references column user_pseudo_id which is neither grouped nor aggregated
ошибку. Есть какие-нибудь идеи о том, что случилось?
Ответ №1:
вот как вы можете это сделать :
select user_id,num_sessions,num_search
from (
select user_id , count(*) num_sessions
from t1
group by user_id
) t1
left join (
select user_id , count(*) num_search
from t2
group by user_id
) t2 on t1.user_id = t2.user_id
Ответ №2:
Вы также можете сделать это с помощью агрегации и union all
:
select user_id, sum(is_session) as num_sessions, sum(is_search) as num_searches
from ((select user_id, 1 as is_session, 0 as is_search
from number_of_user_sessions
) union all
(select user_id, 0, 1
from number_of_searches
)
) u
group by user_id;
Или эквивалентно как:
select user_id, countif(which = 'session') as num_sessions,
countif(which = 'search') as num_searches
from ((select user_id, 'session' as which
from number_of_user_sessions
) union all
(select user_id, 'search'
from number_of_searches
)
) u
group by user_id;
Ответ №3:
В вашем коде есть небольшая проблема. Я введу правильную форму вашего кода ниже.
SELECT t1.user_id,COUNT(t1.user_id) as num_sessions,temp.num_search
FROM t1
LEFT JOIN (
SELECT user_id, COUNT(user_id) as num_search FROM t2
GROUP BY user_id) temp
ON t1.user_id= temp.user_id
GROUP BY t1.user_id,temp.num_search
ORDER BY COUNT(t1.user_id) DESC
Комментарии:
1. это возвращает новую ошибку
SELECT list expression references temp.num_search which is neither grouped nor aggregated a