MySQL: Comment sélectionner et afficher TOUTES les lignes d'une table, et de calculer la somme d'une clause where sur une autre table?
J'essaie d'afficher toutes les lignes d'une table et aussi de SOMME/AVG les résultats dans une seule colonne, qui est le résultat d'une clause where. Qui n'a sans doute pas beaucoup de sens, alors laissez-moi vous expliquer.
J'ai besoin d'afficher un rapport de tous les employés...
SELECT Employees.Name, Employees.Extension
FROM Employees;
--------------
| Name | Ext |
--------------
| Joe | 123 |
| Jane | 124 |
| John | 125 |
--------------
...et joindre des informations à partir des appels téléphoniques de la table...
--------------------------------------------------------------
| 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 |
------------------------------------------------------------
Maintenant, je veux filtrer certaines des lignes qui sont inclus dans la SOMME et AVG calculs...
WHERE PhoneCalls.StartTime BETWEEN "2010-09-12 09:30:00" AND NOW()
...qui sera idéalement résultat dans un tableau à la recherche de quelque chose comme ceci:
------------------------------------------------------------
| Name | Ext | CallCount | AverageCallTime | TotalCallTime |
------------------------------------------------------------
| Joe | 123 | 5 | 200 | 1000 |
| Jane | 124 | 10 | 250 | 2500 |
| John | 125 | 0 | 0 | 0 |
------------------------------------------------------------
Noter que John n'a pas fait tous les appels à cette date, de sorte que le total de ses CallCount est égale à zéro, mais il est toujours dans la liste des résultats. Je n'arrive pas à comprendre comment tenir des registres comme Jean dans la liste. Quand j'ai ajouter la clause where, ces enregistrements sont filtrés.
Comment puis-je créer une instruction select qui affiche tous les Employés et ne Sommes/AVGs les valeurs renvoyées par la clause where?
OriginalL'auteur Andrew | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
Utilisation:
Le problème est lors de l'utilisation d'une JOINTURE EXTERNE, précisant les critères de la JOINTURE de la section est appliquée avant la JOINTURE se déroule--dérivés comme la table ou de la vue intégrée. Le
WHERE
clause est appliquée après la JOINTURE EXTERNE, c'est pourquoi lorsque vous avez spécifié à la clause where sur la table de JOINTURE EXTERNE GAUCHE pour que les lignes vous avez toujours voulu voir sont filtrés.Ne pas le GROUPE de requêtes PAR courriel.extension, pas pc.extension? Comme donné, ne sont pas tous les employés qui n'appelle être regroupés?
Je n'aime vraiment pas confiance sur MySQL cachés de la colonne de la fonctionnalité
Allez avoir besoin de données, par exemple pour diagnostiquer le problème que vous avez vu.
c'était mon! Merci!!!!!!
OriginalL'auteur OMG Ponies