В любом случае, чтобы оптимизировать этот запрос для MySQL 5.1?MySQL Оптимизация avg, запрос суммы остались вложенными вложенными select
У меня есть таблица «Calls», есть поля «Caller» (от номера), «Callee» (до номера) и «Duration», этот запрос отлично работает в SQLite, но он очень медленный в MySQL с огромными данными 14 миллиардов записей.
У меня есть указатель на поле Caller.
select A.Caller, ifnull(aCallOut, 0) as CallOut, round((ifnull(aDuration, 0)/60), 2) as Duration, round((ifnull(aAverage, 0)/60), 2) as Average, Times, 0, 0, 0, 0
from
(
select Caller, sum(duration) as aDuration, count(*) Times -- sum of duration of each caller
from Calls
group by Caller
) As A
left join
(
select Caller, avg(duration) as aAverage -- i want avg duration of numbers that calling more than 0 seconds
from Calls
where Duration > 0
group by Caller
) as C
on A.Caller = C.Caller
left join
(
select Caller, count(*) as aCallOut -- i need to count how many numbers that caller called, ignoring the duplicating calls
from
(
select Caller, count(*) aCount
from Calls
group by Caller, Callee
) as D
group by Caller
) as B
on A.Caller = B.Caller
Первые два могут быть объединены достаточно просто, но мне трудно понять точку третьей части; 'Callee' больше нигде не упоминается, не используется в соединении, и нет никаких сумм слияния (суммы, среднего и т. Д.) Нескольких вызываемых абонентов на вызывающем абоненте, к которому они присоединились. – Uueerdo
Ничего, ответ Гордона ниже дает это более ясный. – Uueerdo