13583について
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
13583について
msg# 1
ruttey
投稿数: 3
この問題の解説にある、下記ですが、
↓解説
設問のSQL文では、最初に内側の副問合せである
SELECT MAX(SUM(salary))
FROM employees
GROUP BY department_id
が実施されます。この問合せでは、DEPARTMENT_ID毎の給与の合計額を計算し、一番多い給与の合計額を1件返します。
↑解説
このSQLで1件のみ返すというのが良く理解できないのですが、
グループ関数が入れ子になっている場合、group byは内側の
SQLのみに掛かるという意味でしょうか?MAXがなければdepartmentid毎に複数の結果が返りますよね?
↓解説
設問のSQL文では、最初に内側の副問合せである
SELECT MAX(SUM(salary))
FROM employees
GROUP BY department_id
が実施されます。この問合せでは、DEPARTMENT_ID毎の給与の合計額を計算し、一番多い給与の合計額を1件返します。
↑解説
このSQLで1件のみ返すというのが良く理解できないのですが、
グループ関数が入れ子になっている場合、group byは内側の
SQLのみに掛かるという意味でしょうか?MAXがなければdepartmentid毎に複数の結果が返りますよね?
Re: 13583について
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
ちょっと疑問点がはっきり読み取れてないのですが
引用:提示されたのは
だけですが、設問のSQL全体で見ると
ですよね。分解したら内側から
になります。こうしてみると、GROUP BYはそれぞれの副問合せの中にあるので、「内側(副問合せのこと?)のSQLのみに掛かる」という理解はあっています。
で、これとは別に
引用:という話もありますが、これは上記AのSQLについての話題で良いですよね?
その場合、実際に実行してみるとこんな感じです。
出力からイメージできるかと思いますが、「department_idごと(group by)にsalaryをsumし、そのsumした結果の中で最大(max)を取得する」なので、1件だけ返ってくる、ということです。
※というか「最大」が複数あるわけない、って単純な話でもあるんですけどね
引用:
このSQLで1件のみ返すというのが良く理解できないのですが、
グループ関数が入れ子になっている場合、group byは内側の
SQLのみに掛かるという意味でしょうか?MAXがなければdepartmentid毎に複数の結果が返りますよね?
SELECT MAX(SUM(salary))
FROM employees
GROUP BY department_id
SELECT employee_id, employee_name
FROM employees
WHERE department_id IN
(SELECT department_id
FROM employees
HAVING SUM(salary) =
(SELECT MAX(SUM(salary))
FROM employees
GROUP BY department_id)
GROUP BY department_id);
A.
(SELECT MAX(SUM(salary))
FROM employees
GROUP BY department_id)
B.
(SELECT department_id
FROM employees
HAVING SUM(salary) = A
GROUP BY department_id)
C.
SELECT employee_id, employee_name
FROM employees
WHERE department_id IN B;
で、これとは別に
引用:
MAXがなければdepartmentid毎に複数の結果が返りますよね?
その場合、実際に実行してみるとこんな感じです。
SQL> select department_id,sum(salary) from employees group by department_id;
DEPARTMENT_ID SUM(SALARY)
------------- -----------
1 3450000
2 1200000
4 1100000
5 900000
3 1200000
SQL> select max(sum(salary)) from employees group by department_id;
MAX(SUM(SALARY))
----------------
3450000
※というか「最大」が複数あるわけない、って単純な話でもあるんですけどね