MySQL: Comment sélectionner et afficher TOUTES les lignes d'une table, et de calculer la somme d'une clause where sur une autre table?

J'essaie d'afficher toutes les lignes d'une table et aussi de SOMME/AVG les résultats dans une seule colonne, qui est le résultat d'une clause where. Qui n'a sans doute pas beaucoup de sens, alors laissez-moi vous expliquer.

J'ai besoin d'afficher un rapport de tous les employés...

SELECT Employees.Name, Employees.Extension 
FROM Employees;

--------------
| Name | Ext |
--------------
| Joe  | 123 |
| Jane | 124 |
| John | 125 |
--------------

...et joindre des informations à partir des appels téléphoniques de la table...

--------------------------------------------------------------
| PhoneCalls Table                                           |
--------------------------------------------------------------
| Ext |      StartTime      |       EndTime       | Duration |
--------------------------------------------------------------
| 123 | 2010-09-05 10:54:22 | 2010-09-05 10:58:22 |   240    |
--------------------------------------------------------------

SELECT Employees.Name, 
       Employees.Extension,
       Count(PhoneCalls.*) AS CallCount, 
       AVG(PhoneCalls.Duration) AS AverageCallTime, 
       SUM(PhoneCalls.Duration) AS TotalCallTime
FROM Employees
LEFT JOIN PhoneCalls ON Employees.Extension = PhoneCalls.Extension
GROUP BY Employees.Extension;

------------------------------------------------------------
| Name | Ext | CallCount | AverageCallTime | TotalCallTime |
------------------------------------------------------------
| Joe  | 123 |     10    |       200       |      2000     |
| Jane | 124 |     20    |       250       |      5000     |
| John | 125 |      3    |       100       |       300     |
------------------------------------------------------------

Maintenant, je veux filtrer certaines des lignes qui sont inclus dans la SOMME et AVG calculs...

WHERE PhoneCalls.StartTime BETWEEN "2010-09-12 09:30:00" AND NOW()

...qui sera idéalement résultat dans un tableau à la recherche de quelque chose comme ceci:

------------------------------------------------------------
| Name | Ext | CallCount | AverageCallTime | TotalCallTime |
------------------------------------------------------------
| Joe  | 123 |      5    |       200       |      1000     |
| Jane | 124 |     10    |       250       |      2500     |
| John | 125 |      0    |         0       |         0     | 
------------------------------------------------------------

Noter que John n'a pas fait tous les appels à cette date, de sorte que le total de ses CallCount est égale à zéro, mais il est toujours dans la liste des résultats. Je n'arrive pas à comprendre comment tenir des registres comme Jean dans la liste. Quand j'ai ajouter la clause where, ces enregistrements sont filtrés.

Comment puis-je créer une instruction select qui affiche tous les Employés et ne Sommes/AVGs les valeurs renvoyées par la clause where?

OriginalL'auteur Andrew | 2010-10-12