0
votes

MySQL compte total total total où tout / chaque jointe = une valeur donnée

J'ai essayé de simplifier cela autant que possible avec des données d'échantillonnage simples. J'ai une table appelée missions et une table appelée Tâches:

affectations xxx

XXX

Dans l'état de la tâche, 1 signifie pas complet et 2 signifie complet.

pour chaque affectation, des tâches connexes. Je veux obtenir un nombre de toutes les tâches où toutes les tâches associées sont complètes (Task_Status = 2) (dans mon cas d'utilisation réelle, répondant également à un groupe d'autres critères, mais qui est en dehors de cet échantillon.)

Donc, dans cet exemple, la réponse doit être "1" . pas une liste de résultats, juste le nombre d'entre eux. (juste les tâches du matin sont complètes, les tâches de l'après-midi ont été démarrées, mais toutes sont toutes complètes.)

Je ne veux pas savoir combien de tâches sont complètes ou combien d'affectations ont été démarrées, à savoir combien d'affectations sont complètes à 100%.

J'ai essayé de plusieurs manières Mais je frappe un bloc mental ...

Cela me donnera toutes les tâches où il existe une tâche remplie xxx

cela me donnera également toutes les tâches où il existe une tâche remplie xxx

mais je veux où toutes les tâches sont complets. (juste un compte de combien de personnes sont terminées, pas une liste de tous les résultats.)

Cela donnera le nombre de résultats (en rangées résultantes, que je pourrait compter), mais j'ai besoin de la valeur dans la requête (pour effectuer d'autres calculs avec) xxx

le nombre de résultats est égal au total

toutes idées?


0 commentaires

4 Réponses :


2
votes

Vous pouvez utiliser tout dénombrer = cas de comptage lorsque Status = 2 code> pour le faire. XXX PRE>


MISE À JOUR: H3>

apprécier l'effort, mais je cherche un nombre de complets, pas une liste p> blockQuote>

| completedCount |
| -------------: |
|              2 |


2 commentaires

Démo Lien: dbfiddle.uk/...


Appréciez l'effort, mais je cherche un compte acheté, pas une liste ...



2
votes

S'il n'y a pas null s dans Task_Status de des tâches puis rejoindre et groupe par attribution_id et définissez le Condition dans le ayant Clause: xxx

Si vous n'avez besoin que de l'identifiant de l'affectation, vous n'avez pas besoin du tableau affectations : xxx

Si vous souhaitez le nombre de ces affectations: xxx

Voir le Demo .


1 commentaires

Appréciez l'effort, mais je cherche un compte acheté, pas une liste ...



1
votes

Au lieu de rejoindre et d'agréger, vous pouvez filtrer avec un n'existe pas condition et une sous-requête corrélée qui garantit qu'il n'y a pas d'enregistrement dans la table Tableau avec un statut autre que 2 : xxx

avec un index sur la tâche (assignation_id, task_status) , cela devrait être une option efficace.

Si vous souhaitez la liste d'affectation, vous pouvez remplacer compter (*) avec * .

Demo sur DB Fiddle :

Compte: < Pré> xxx

détails: xxx


0 commentaires

0
votes

a reçu de bonnes réponses (et acceptées une), mais n'a pas pu obtenir de leurs méthodes pour donner la bonne réponse avec le reste de ma requête. Pour une référence future, voici ce que j'ai fini avec: xxx

Cela pourrait ne pas être le plus efficace, mais je suis capable d'obtenir la bonne réponse avec elle dans ma situation ...


0 commentaires