J'ai 3 tables:nombre max avec joint
utilisateurs:
Id Login
1 John
2 Bill
3 Jim
ordinateurs:
Id Name
1 Computer1
2 Computer2
3 Computer3
4 Computer4
5 Computer5
séances:
UserId ComputerId Minutes
1 2 47
2 1 32
1 4 15
2 5 5
1 2 7
1 1 40
2 5 31
Je voudrais afficher ce tableau résultant:
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 - - - - -
Moi-même, je ne peux couvrir 3 premières colonnes avec:
SELECT Login, COUNT(sessions.UserId), SUM(Minutes) FROM users
LEFT JOIN sessions
ON users.Id = sessions.UserId GROUP BY users.Id
Et une sorte d'autres colonnes avec:
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
Mais j'ai besoin d'obtenir toute la table résultante dans une requête. Je sens que je fais quelque chose de complètement faux. Besoin d'aide pour.
Il ressemble à une requête - voulez-vous dire que vous ne voulez pas utiliser les requêtes imbriquées En outre, SQL qui utilisez-vous? ? PostreSQL? MySQL? MS SQL? –