Я пытаюсь отобразить все строки из одной таблицы, а также СУММ / СРЕДНИЙ результаты в одном столбце, что является результатом предложения 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?