Короче у меня есть 2 таблицы:Лучший способ подсчета этого данные
ПОЛЬЗОВАТЕЛЕЙ:
------------------------
UserID | Name
------------------------
0 a
1 b
2 c
CALLS:
------------------------
ToUser | Result
------------------------
0 ANSWERED
1 ENGAGED
1 ANSWERED
0 ANSWERED
Etc и т.д. (я использовать числовую Referance результата в реальности)
У меня есть более 2 миллиона записей, каждый из которых указывает вызов конкретному клиенту. В настоящее время я использую заявление Case для подсчета каждого recurance конкретного результата после того как я уже сделал быстрый общий счет:
COUNT(DISTINCT l_call_log.line_id),
COALESCE (SUM(CASE WHEN l_call_log.line_result = 1 THEN 1 ELSE NULL END), 0) AS [Answered],
COALESCE (SUM(CASE WHEN l_call_log.line_result = 2 THEN 1 ELSE NULL END), 0) AS [Engaged],
COALESCE (SUM(CASE WHEN l_call_log.line_result = 4 THEN 1 ELSE NULL END), 0) AS [Unanswered]
я делаю 3 сканы данных после моего щётка общего количества? если да, то есть ли способ, которым я могу сделать одну развертку и считать вызовы как за один результат за один раз?
Спасибо.
Я попытался сделать индекс функции для результата, но он не отличался от IDE - он все еще Время, затрачиваемое на изучение, требует одного сканирования для завершения всех трех выражений. думая об этом, проведет ли он одно сканирование, чтобы сгруппировать вызовы через пользователя (подсчет числа), а затем другое сканирование для каждого пользователя для подсчета результатов? –
Drat. Я пропустил часть вашего запроса DISTINCT, что меняет ситуацию. –
Спасибо, в любом случае, Алекс, я думаю, ты поставил меня на правильный путь или, по крайней мере, правильно подумал, чтобы улучшить это. –