была задача посчитать евенты определенного типа для пар email, file_id
примерно так
Select u.email as email, e.file_id, count( DISTINCT u.email, e.file_id ) as counter
from users u
left JOIN event e.email = u.email
where e.event_type = 5
GROUP by u.email, e.subject_id
но теперь надо считать пары для которых есть один из евентов 12 или 13 и старый 5
типа event_type in (12,13) and event_type = 5
реальный запрос посложнее, с джоинами по кастомерам, проектам и другим структурным единицам
таблица events очень большая, пробовал с подзапросами — тормозит жуть
Здравствуйте, mogadanez, Вы писали:
M>имеем таблички
M>users: M>id, email
M>events: M>id, file_id, user_id, event_type
M>была задача посчитать евенты определенного типа для пар email, file_id
M>примерно так M>
M>Selectu.email as email, e.file_id, count( DISTINCT u.email, e.file_id ) as counter
M> from users u
M> left JOIN event e.email = u.email
M> where e.event_type = 5
M> GROUP byu.email, e.subject_id
M>
M>но теперь надо считать пары для которых есть один из евентов 12 или 13 и старый 5
M> типа event_type in (12,13) and event_type = 5
M>реальный запрос посложнее, с джоинами по кастомерам, проектам и другим структурным единицам M>таблица events очень большая, пробовал с подзапросами — тормозит жуть
База, случаем, не MySQL? Просто вроде остальные требуют чтобы в GROUP BY были те же столбцы, что выбираются в SELECT.
Здравствуйте, mogadanez, Вы писали:
M>имеем таблички
M>users: M>id, email
M>events: M>id, file_id, user_id, event_type
M>была задача посчитать евенты определенного типа для пар email, file_id
M>реальный запрос посложнее, с джоинами по кастомерам, проектам и другим структурным единицам M>таблица events очень большая, пробовал с подзапросами — тормозит жуть
А в чем собственно проблема? Написать запрос, чтобы не тормозил,или что?
И да, соглашусь с ответом выше — укажите БД, от этого много зависит.
S>База, случаем, не MySQL? Просто вроде остальные требуют чтобы в GROUP BY были те же столбцы, что выбираются в SELECT.
MS MY SQL( Amazon Aurora MySQL ), да одна и таже там просто на ходу правил запрос чтобы понятнее был
Select u.email as email, e.file_id, count( DISTINCT u.email, e.file_id ) as counter
from users u
left JOIN event e.email = u.email
where e.event_type = 5
GROUP by u.email, e.file_id
Здравствуйте, Milena, Вы писали:
M>А в чем собственно проблема? Написать запрос, чтобы не тормозил,или что? M>И да, соглашусь с ответом выше — укажите БД, от этого много зависит.
как написать запрос чтобы это не был совсем монстр
MySQL( Amazon Aurora MySQL )
полный запрос без упрощений
Select lu.email as email, e.subject_id, count( DISTINCT lu.email, e.subject_id ) as viewed
from list_user lu
left JOIN list l on l.id = lu.list_id
left JOIN automation_user_list aul on l.id = aul.list_user_id
left JOIN automation_event ae on aul.automation_id = ae.automation_id
left JOIN automation_event_subject aes on aes.automation_event_id = ae.id
left JOIN automation a on a.id = ae.automation_id
left JOIN event e on e.company_id = a.company_id
and e.email = lu.email
and e.subject_id = aes.subject_id
and e.event_type_id = 5
where aul.automation_id = ? and ae.status > 0
GROUP by lu.email, e.subject_id
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, Milena, Вы писали:
M>>А в чем собственно проблема? Написать запрос, чтобы не тормозил,или что? M>>И да, соглашусь с ответом выше — укажите БД, от этого много зависит.
так как в случае условия на несколько строк количество не особо становится важно, а только факт было небыло
придумал та кой вариант
Select lu.email as email, e.subject_id, e.event_type_id, sum( distinct e.event_type_id) as flags,
case sum( e.event_type_id)
WHEN 17 THEN 1 -- только 12 и 5WHEN 18 THEN 1 -- только 13 и 5 WHEN 30 THEN 1 -- 12 и 13 и 5 ELSE 0
end as viewed
from list_user lu
.....
left JOIN event .....
and e.event_type_id in ( 12, 13, 5 )
Select lu.email as email, e.subject_id, count( DISTINCT lu.email, e.subject_id ) as viewed
from list_user lu
left JOIN list l on l.id = lu.list_id
left JOIN automation_user_list aul on l.id = aul.list_user_id
left JOIN automation_event ae on aul.automation_id = ae.automation_id
left JOIN automation_event_subject aes on aes.automation_event_id = ae.id
left JOIN automation a on a.id = ae.automation_id
left JOIN event e on e.company_id = a.company_id
and e.email = lu.email
and e.subject_id = aes.subject_id
left JOIN event e2 on e2.company_id = a.company_id
and e2.email = lu.email
and e2.subject_id = aes.subject_id
where aul.automation_id = ? and ae.status > 0 and e.event_type_id = 5 and e2.event_type_id in (12, 13)
GROUP by lu.email, e2.subject_id
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Ромашка, Вы писали:
Р>Здравствуйте, mogadanez, Вы писали:
Р>Так?
имеет ли смысл e2 заджоинть с e1 по id ( типа "из них" )
Select .....
left JOIN event e on e.company_id = a.company_id
and e.email = lu.email
and e.subject_id = aes.subject_id
left JOIN event e2 on e2.id = e.id
where aul.automation_id = ? and ae.status > 0 and e.event_type_id = 5 and e2.event_type_id in (12, 13)
GROUP by lu.email, e2.subject_id
Здравствуйте, Ромашка, Вы писали:
Р>Здравствуйте, mogadanez, Вы писали: M>>имеет ли смысл e2 заджоинть с e1 по id ( типа "из них" )
Р>Нет конечно, ты ставишь в соответствие ту же самую запись — это не имеет смысла, такая запись у тебя уже есть.