2017-10-17 15 views
0

私は3つのテーブル(教授、報酬と部門)を持つ課題に取り組んでいます。3つのテーブルとAVG()関数を使用するSQLクエリを作成しようとしています

部門ごとの平均休暇日数を出力するクエリを作成する必要があります。

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   

は、理想的には、これが私のクエリはになりますものです...これはちょうどまっすぐの加入が必要です

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 

答えて

1

次のようにテーブルに対して

テーブルとスキーマありです部門ごとの集計を持つ3つのテーブル。特定の部門にヘッドカウントがない場合は、平均をCOALESCEにラップすることに注意してください。次のクエリを試してください:

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 
関連する問題