Количество вызовов на номер
SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
Наибольшее количество звонков на номер
SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
Сумма стоимости звонков на номер с наибольшим количеством звонков
SELECT SUM(l.cost), l.dialledNumber
FROM logData AS l
JOIN (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
ON l.dialledNumber = c.dialledNumber
JOIN (SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
)
) AS m
ON m.maxCalls = c.calls
Если есть два числа с одинаковым максимальным количеством вызовов, оба будут показаны. Вы можете получить максимальную сумму расходов, если хотите получить фантазию.
Подзапрос m
может использоваться без объединения как «простого» номера:
SELECT SUM(l.cost), l.dialledNumber
FROM logData AS l
JOIN (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
ON l.dialledNumber = c.dialledNumber
AND c.calls = (SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
)
) AS m
Хороший оптимизатор будет использовать тот же план запроса для обоих.