助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26602
問題を開く
EMPLOYEES表の構造を確認してください。



次の問い合わせのうち、エラーとならない問い合わせはどれですか(該当するものを全て選択して下さい)。

正解

SELECT MAX(salary), MIN(salary), AVG(salary) FROM employees;

SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id;

解説

SELECT文にGROUP BY句を指定しない場合、グループ関数を使用することはできますが、グループ関数をネストすることはできません。
また、GROUP BY句を指定しても、グループ関数は2レベルまでしかネストすることができません。

以上より、
・SELECT MAX(salary), MIN(salary), AVG(salary) FROM employees;
・SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id;
が正解となります。

正解のSQL文の実行結果は次のようになります。





その他の選択肢については次のとおりです。

・SELECT AVG(MIN(salary)) FROM employees;
グループ関数をネストする場合は、必ずGROUP BY句を指定しなければなりません。

・SELECT AVG(MIN(MAX(salary))) FROM employees GROUP BY department_id, job_id;
グループ関数はGROUP BY句を指定しても、2レベルまでしかネストできないためエラーとなります。

・SELECT MAX(AVG(hiredate)) FROM employees GROUP BY department_id;
AVG関数に引数には数値型を指定しなければなりません。

主なグループ関数であるCOUNT,MAX,MIN,SUM,AVG関数の引数には、次の値を指定します。

・COUNT関数  : 数値型、文字列型、日付型の値を返す式または列と*(アスタリスク)
・MAX/MIN関数 : 数値型、文字列型、日付型の値を返す式または列
・SUM/AVG関数 : 数値型の値を返す式または列

参考:
グループ関数は、GROUP BY句を指定した場合に限りネストすることができます。
グループ関数のネストレベルは2レベルまでです。


 
SQLを表示
SELECT MAX(AVG(salary))
FROM employees;



 
SQLを表示
SELECT MAX(AVG(salary)) "Sal"
FROM employees
GROUP BY department_id;



 
SQLを表示
SELECT MAX(MIN(AVG(salary))) "Sal"
FROM employees
GROUP BY department_id, job_id;
上に戻る

SELECT文にGROUP BY句で指定したdepartment_idが入っていない

公開日 2024/05/10

これはなぜSELECT文に入れないくてもいいかわかる方いらっしゃいますか?

2024/05/11 14:14

SELECT句はあくまでも、どの値を結果に表示するかSELECTする記述になるので、
department_idが必要でなければ、入れなくても問題ありません。

例えば、SELECT MAX(AVG(salary)) FROM~であれば、
給与の平均が最大の部署の、金額を知りたいけど、部署までは知る必要がない
という要件になると思います。


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?