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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden:
Das Problem ist bei der Verwendung von OUTER-JOIN, die Festlegung von Kriterien, die im JOIN-Abschnitt angewendet wird vor die VERKNÜPFUNG erfolgt-wie eine abgeleitete Tabelle oder inline-anzeigen. Die
WHERE
- Klausel wird angewendet, nachdem die ÄUßERE VERKNÜPFUNG, das ist, warum, wenn Sie angegeben wird der WHERE-Klausel auf die Tabelle, der LEFT OUTER JOIN würde, dass die Zeilen, die Sie noch sehen wollten, werden herausgefiltert.Sollte nicht die Abfrage GROUP BY e.Erweiterung, nicht pc.Erweiterung? Als gegeben an, nicht alle Mitarbeiter mit keine Anrufe zusammengefasst werden?
Ich weiß wirklich nicht, wie das Vertrauen auf MySQL-verborgene Spalte Funktionalität
Müssen beispielsweise Daten zu diagnostizieren das Problem, das Sie sehen.
das war mein es! Danke!!!!!
InformationsquelleAutor OMG Ponies