Tôi đang cố gắng hiển thị tất cả các hàng từ một bảng và cũng có thể SUM/AVG kết quả trong một cột, đó là kết quả của mệnh đề where. Điều đó có lẽ không có ý nghĩa nhiều, vì vậy hãy để tôi giải thích.MySQL: Cách chọn và hiển thị TẤT CẢ các hàng từ một bảng và tính tổng của mệnh đề where trên một bảng khác?
tôi cần phải hiển thị một báo cáo của tất cả các nhân viên ...
SELECT Employees.Name, Employees.Extension
FROM Employees;
--------------
| Name | Ext |
--------------
| Joe | 123 |
| Jane | 124 |
| John | 125 |
--------------
... và tham gia một số thông tin từ bảng 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 |
------------------------------------------------------------
Bây giờ tôi muốn lọc ra một số hàng được bao gồm trong các tính toán SUM và AVG ...
WHERE PhoneCalls.StartTime BETWEEN "2010-09-12 09:30:00" AND NOW()
... điều này lý tưởng sẽ dẫn đến một tab le tìm kiếm một cái gì đó như thế này:
------------------------------------------------------------
| Name | Ext | CallCount | AverageCallTime | TotalCallTime |
------------------------------------------------------------
| Joe | 123 | 5 | 200 | 1000 |
| Jane | 124 | 10 | 250 | 2500 |
| John | 125 | 0 | 0 | 0 |
------------------------------------------------------------
Lưu ý rằng John không thực hiện bất kỳ cuộc gọi nào trong phạm vi ngày này, vì vậy tổng số CallCount của nó bằng 0, nhưng anh vẫn nằm trong danh sách kết quả. Tôi dường như không thể tìm ra cách giữ hồ sơ như John trong danh sách. Khi tôi thêm mệnh đề WHERE, các bản ghi đó được lọc ra.
Làm cách nào để tạo một câu lệnh chọn hiển thị tất cả các Nhân viên và chỉ SUMs/AVGs các giá trị được trả lại từ mệnh đề WHERE?
hmm ... điều này dường như cung cấp cho tôi một vài kết quả khác, nhưng không phải tất cả chúng. – Andrew
Không nên truy vấn GROUP BY e.extension, không phải pc.extension? Như đã nêu, không phải tất cả nhân viên không có cuộc gọi nào được nhóm lại với nhau? –
@djacobson: Tôi thực sự không thích sự phụ thuộc vào [chức năng cột ẩn của MySQL] (http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html) –