2017-07-03 4 views
-1

Je suis en train de résoudre cet exercice:Comment écrire une requête JOIN dans un lien SQL vers d'autres tables? (Q spécifique dans la description)

Le résultat de cette requête devrait afficher le titre parent/tuteur, prénom et nom de famille dans une seule colonne, et le nombre total d'activités pris par tous les enfants enregistrés auprès de ce parent/soignant.

C'est ce que j'ai jusqu'à présent:

SELECT CONCAT(carer_title, ' ', carer_fname, ' ', carer_sname) AS 'carer name' 
    FROM Carer; 

me donner la première colonne:

enter image description here

J'apprécie cela est délicat sans regarder le plein schéma, mais est ici la faites-moi savoir si vous pensez que je manque des informations.

Schéma: Schema

tables et colonnes pertinentes:

Carer | carer_id | carer_title | carer_fname | carer_sname | carer_phone | carer_address1 | carer_address2 | carer_town | carer_pcode

Enfant | child_id | nom_fichier | child_sname | child_gender | child_dob | child_carer | child_school

Childactivity (Table reliant les enfants et les activités dans lesquelles ils se composent de clés étrangères) | child_id | activity_id

Activité | activity_id | nom_activité | activity_day | activity_fee

Comment allez-vous ajouter une colonne qui trouve le nombre total d'activités réalisées par tous les enfants inscrits à chaque soignant?

+0

'child carer' est un nom de colonne avec un espace? Est-ce la clé étrangère correspondant à 'Carer.carer_id'? – trincot

+0

* "nombre total d'activités pratiquées par tous les enfants" *: cela signifie-t-il que seules les activités auxquelles * tous les enfants participent sont comptabilisées? Ou faut-il compter des activités auxquelles au moins * un * enfant participe? – trincot

+0

* child_carer, oui exactement. Et auquel participe au moins un enfant – AKL012

Répondre

1

Vous pouvez rejoindre les autres tables concernées, et compte par groupe:

select concat(carer_title, ' ', carer_fname, ' ', carer_sname) as `carer name`, 
      count(*) `number of activities` 
from  carer 
left join child on child.child_carer = carer.carer_id 
left join childactivity on childactivity.child_id = child.child_id 
group by carer.id; 

Si seules activités distinctes doivent être comptées, donc sans compter deux fois lorsque deux enfants participent à la même activité, puis remplacez count(*) par count(distinct childactivity.activity_id)