Re: 13583について
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
※というか「最大」が複数あるわけない、って単純な話でもあるんですけどね
投稿ツリー
-
13583について
(ruttey, 2021-11-6 17:20)
- Re: 13583について (arashi1977, 2021-11-6 23:39)