MySQL: auswählen und anzeigen ALLER Zeilen aus einer Tabelle, und berechnen Sie die Summe einer where-Klausel auf eine andere Tabelle?

Ich versuche, um alle Zeilen aus einer Tabelle, und auch SUM - /AVG-Werte die Ergebnisse in einer Spalte, die das Ergebnis einer where-Klausel. Dass das wohl nicht viel Sinn, so lassen Sie mich erklären.

Brauche ich, um einen Bericht anzuzeigen, der alle Mitarbeiter...

SELECT Employees.Name, Employees.Extension 
FROM Employees;

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

...und an einige Informationen aus den Telefongesprächen Tabelle...

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

Nun will ich herausfiltern, die einige der Zeilen, die enthalten sind in der SUMME und AVG Berechnungen...

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

...die idealerweise in einer Tabelle suchen so etwas wie dieses:

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

Beachten Sie, dass John noch keine hat fordert in diesem Datum-Bereich, so wird seine gesamte CallCount null ist, aber er ist immer noch in der Liste der Ergebnisse. Ich kann nicht scheinen, um herauszufinden, wie Sie die Unterlagen aufbewahren, wie John in der Liste. Wenn ich die WHERE-Klausel die Datensätze werden herausgefiltert.

Wie kann ich eine select-Anweisung, die zeigt alle Mitarbeiter und nur Summen/AVGs der Werte zurückgegeben, die von der WHERE-Klausel?

InformationsquelleAutor Andrew | 2010-10-12

Schreibe einen Kommentar