каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 22.10.19 14:47
Оценка:
имеем таблички

users:
id, email

events:
id, file_id, user_id, event_type

была задача посчитать евенты определенного типа для пар 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 очень большая, пробовал с подзапросами — тормозит жуть
Re: каунт по нескольким строкам
От: Somescout  
Дата: 22.10.19 14:51
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>имеем таблички


M>users:

M>id, email

M>events:

M>id, file_id, user_id, event_type

M>была задача посчитать евенты определенного типа для пар email, file_id


M>примерно так

M>
M>Select  u.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 by u.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.
ARI ARI ARI... Arrivederci!
Re: каунт по нескольким строкам
От: Milena США  
Дата: 22.10.19 15:00
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>имеем таблички


M>users:

M>id, email

M>events:

M>id, file_id, user_id, event_type

M>была задача посчитать евенты определенного типа для пар email, file_id



M>реальный запрос посложнее, с джоинами по кастомерам, проектам и другим структурным единицам

M>таблица events очень большая, пробовал с подзапросами — тормозит жуть

А в чем собственно проблема? Написать запрос, чтобы не тормозил,или что?
И да, соглашусь с ответом выше — укажите БД, от этого много зависит.
Re[2]: каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 22.10.19 15:02
Оценка:
Здравствуйте, Somescout, Вы писали:


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
Отредактировано 22.10.2019 15:06 mogadanez . Предыдущая версия .
Re[2]: каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 22.10.19 15:10
Оценка:
Здравствуйте, 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
Re[3]: каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 22.10.19 15:25
Оценка:
Здравствуйте, 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 и 5
      WHEN 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 )
Re[3]: каунт по нескольким строкам
От: Ромашка Украина  
Дата: 22.10.19 15:39
Оценка: 15 (1)
Здравствуйте, mogadanez, Вы писали:

Так?

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


Всё, что нас не убивает, ещё горько об этом пожалеет.
Отредактировано 22.10.2019 15:39 Ромашка . Предыдущая версия .
Re[4]: каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 23.10.19 10:27
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Здравствуйте, 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
Re[5]: каунт по нескольким строкам
От: Ромашка Украина  
Дата: 23.10.19 13:41
Оценка:
Здравствуйте, mogadanez, Вы писали:
M>имеет ли смысл e2 заджоинть с e1 по id ( типа "из них" )

Нет конечно, ты ставишь в соответствие ту же самую запись — это не имеет смысла, такая запись у тебя уже есть.


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[6]: каунт по нескольким строкам
От: mogadanez Чехия  
Дата: 23.10.19 22:53
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Здравствуйте, mogadanez, Вы писали:

M>>имеет ли смысл e2 заджоинть с e1 по id ( типа "из них" )

Р>Нет конечно, ты ставишь в соответствие ту же самую запись — это не имеет смысла, такая запись у тебя уже есть.


да, затупил конкретно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.