Il s'agit d'une question de suivi de Comment compter les valeurs distinctes de deux colonnes en un seul nombre ?
Je voulais savoir comment faire la partie comptage et j'ai négligé le fait que je suis déjà en train de joindre d'autres tables dans le mélange.
La réponse donnée à la question précédente est la bonne dans ce cas.
Voici maintenant mon problème supplémentaire.
J'ai 3 tables :
Assignations
+----+-------------------+
| id | name |
+----+-------------------+
| 1 | first-assignment |
| 2 | second-assignment |
+----+-------------------+
Soumissions
+----+---------------+------------+
| id | assignment_id | student_id |
+----+---------------+------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 1 | 3 |
+----+---------------+------------+
Soumissions du groupe
+----+---------------+------------+
| id | submission_id | student_id |
+----+---------------+------------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
+----+---------------+------------+
Chaque soumission appartient à une mission.
Les soumissions peuvent être individuelles ou collectives.
Quand ils sont individuels, celui qui a fait la soumission dans un devoir (assignment_id) va dans la table des soumissions (student_id).
Lorsqu'ils sont soumis à un groupe, la même chose se produit avec deux détails supplémentaires :
- Celui qui fait la soumission va dans la table des soumissions.
- Les autres vont dans la table group_submissions et sont associés à l'id dans la table submissions (donc submission_id est un FK de la table submissions).
Je veux renvoyer chaque devoir avec ses colonnes, mais aussi ajouter le nombre d'étudiants qui ont fait des soumissions pour ce devoir. Gardez à l'esprit que les étudiants qui n'ont pas fait de soumission (ne sont pas dans la table des soumissions) mais qui ont participé à une soumission de groupe (sont dans la table des soumissions de groupe) comptent également.
Quelque chose comme ça :
+----+-------------------+----------+
| id | name | students |
+----+-------------------+----------+
| 1 | first-assignment | 11 |
| 2 | second-assignment | 2 |
+----+-------------------+----------+
J'ai essayé deux façons d'obtenir les chiffres :
count(distinct case when group_submissions.student_id is not null then
group_submissions.student_id when assignment_submissions.student_id is
not null then assignment_submissions.student_id end)
Cela ne fonctionne pas, car l'instruction case sera court-circuitée dès que la première condition sera remplie. Par exemple : Si un étudiant a fait des soumissions de groupe mais n'a jamais réellement fait la soumission, il sera affiché dans la table des soumissions de groupe uniquement. Ainsi, si dans la table des soumissions, l'identifiant est 1 et dans la table des soumissions de groupe, l'identifiant est 2, et que l'identifiant 2 n'apparaît pas dans la table des soumissions, il ne sera pas compté.
count(distinct case when group_submissions.student_id is not null then group_submissions.student_id end)
+ count(distinct case when submissions.student_id is not null then submissions.student_id end)
Celui-ci ne fonctionne pas car il donne des doublons si un étudiant est dans les deux tableaux.
NOTE : Il s'agit d'une base de données MySQL