助け合いフォーラム
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レベルまでです。
また、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;
FROM employees;
SQLを表示
SELECT MAX(AVG(salary)) "Sal"
FROM employees
GROUP BY department_id;
FROM employees
GROUP BY department_id;
SQLを表示
SELECT MAX(MIN(AVG(salary))) "Sal"
FROM employees
GROUP BY department_id, job_id;
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~であれば、
給与の平均が最大の部署の、金額を知りたいけど、部署までは知る必要がない
という要件になると思います。
コメント
この投稿に対して返信しませんか?