MySQL: как выбрать и отобразить ВСЕ строки из одной таблицы и вычислить сумму предложения where в другой таблице?

Я пытаюсь отобразить все строки из одной таблицы, а также СУММ / СРЕДНИЙ результаты в одном столбце, что является результатом предложения where. Это, вероятно, не имеет особого смысла, поэтому позвольте мне объяснить.

Мне нужно вывести отчет обо всех сотрудниках ...

SELECT Employees.Name, Employees.Extension 
FROM Employees;

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

... и добавить некоторую информацию из таблицы PhoneCalls ...

--------------------------------------------------------------
| 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     |
------------------------------------------------------------

Теперь Я хочу отфильтровать некоторые строки, которые включены в вычисления SUM и AVG ...

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

... что в идеале приведет к таблице, выглядящей примерно так:

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

Обратите внимание, что Джон не делал никаких вызовов в этом диапазоне дат, поэтому его общее CallCount равно нулю, но он все еще находится в списке результатов. Кажется, я не могу понять, как вести записи, подобные записи Джона, в списке. Когда я добавляю предложение WHERE, эти записи отфильтровываются.

Как я могу создать оператор выбора, который отображает всех сотрудников и только SUM / AVG значения, возвращенные из предложения WHERE?

5
задан Andrew 12 October 2010 в 18:32
поделиться