У меня есть 3 таблицы:
Пользователи:
Id Login
1 John
2 Bill
3 Jim
компьютеры:
Id Name
1 Computer1
2 Computer2
3 Computer3
4 Computer4
5 Computer5
сессии:
UserId ComputerId Minutes
1 2 47
2 1 32
1 4 15
2 5 5
1 2 7
1 1 40
2 5 31
Я хотел бы отобразить эту результирующую таблицу:
Login Total_sess Total_min Most_freq_computer Sess_on_most_freq Min_on_most_freq
John 4 109 Computer2 2 54
Bill 3 68 Computer5 2 36
Jim - - - - -
Сам я могу покрыть только первые 3 столбца:
SELECT Login, COUNT(sessions.UserId), SUM(Minutes) FROM users
LEFT JOIN sessions
ON users.Id = sessions.UserId GROUP BY users.Id
И некоторые другие столбцы с:
SELECT main.*
FROM (SELECT UserId, ComputerId, COUNT(*) AS cnt ,SUM(Minutes)
FROM sessions
GROUP BY UserId, ComputerId) AS main
INNER JOIN (
SELECT ComputerId, MAX(cnt) AS maxCnt FROM (
SELECT ComputerId, UserId, COUNT(*) AS cnt FROM sessions GROUP BY ComputerId, UserId
)
AS Counts GROUP BY ComputerId)
AS maxes
ON main.ComputerId = maxes.ComputerId
AND main.cnt = maxes.maxCnt
Но мне нужно получить всю результирующую таблицу в одном запросе. Я чувствую, что делаю что-то совершенно не так. Нужна помощь.