2017-10-17 5 views
0

Je travaille sur une affectation où j'ai trois tables (professeur, compensation et département).Essayer d'écrire une requête SQL qui utilise trois tables et la fonction AVG()

J'ai besoin d'écrire une requête qui affiche le nombre moyen de jours de vacances par département.

Les tables et le schéma sont pour les tables est la suivante:

sqlite> .schema compensation 
CREATE TABLE compensation (id integer, professor_id integer, salary integer, 
vacation_days integer); 
sqlite> SELECT * FROM compensation; 
id   professor_id salary  vacation_days 
---------- ------------ ---------- ------------- 
1   1    64000  2    
2   2    35000  8    
3   3    56750  10   
4   4    42950  8    
5   5    30000  4    
6   6    102750  22  

sqlite> .schema department 
CREATE TABLE department (id integer, department_name text); 
sqlite> SELECT * FROM department; 
id   department_name 
---------- --------------- 
31   Transfiguration 
32   Defence Against 
33   Flying   
34   Study of Ancien 
35   Care of Magical 

sqlite> .schema professor 
CREATE TABLE professor (id integer, professor text, department_id integer); 
sqlite> SELECT * FROM professor; 
id   professor   department_id 
---------- ---------------- ------------- 
1   Albus Dumbledore 31   
2   Severus Snape  32   
3   Dolores Umbridge 32   
4   Bathsheda Babbli 34   
5   Rubeus Hagrid  35   
6   Wilhelmina Grubb 35   

Idéalement, c'est ce que ma requête entraînera ...

department_name    average_vacation_days 
----------------------------- --------------------- 
Transfiguration    2.0 
Defence Against the Dark Arts 9.0 
Study of Ancient Runes   8.0 
Care of Magical Creatures  13.0 

Répondre

1

Ce nécessite juste une jointure droite de la trois tables avec une agrégation par département. Notez que j'emballe la moyenne au COALESCE dans le cas où un département donné n'a pas de compte. Essayez la requête suivante:

SELECT 
    d.department_name, 
    COALESCE(AVG(c.vacation_days), 0) AS average_vacation_days 
FROM department d 
LEFT JOIN professor p 
    ON d.id = p.department_id 
LEFT JOIN compensation c 
    ON p.id = c.professor_id 
GROUP BY 
    d.id, 
    d.department_name