ORACLE MASTER Silver SQL 26aiグループ集計と複数表の結合オリジナル・公式資料照合難易度★★★☆☆
Oracle AI Database 26aiのpayroll(dept_id, salary NUMBER)の全行は(10,100)、(10,NULL)、(10,300)、(20,50)である。次のSQLで返る行はどれか。 SELECT dept_id, COUNT(*) AS rows_n, COUNT(salary) AS paid_n, AVG(salary) AS avg_pay FROM payroll GROUP BY dept_id HAVING COUNT(salary) >= 2;
A
部署10のみ: rows_n=3、paid_n=2、avg_pay=200★ 正解
COUNT(*)とCOUNT(salary)の対象を分け、HAVINGを集計後の件数で判定しています。
B
部署10のみ: rows_n=3、paid_n=3、avg_pay=400/3
COUNT(salary)とAVG(salary)はNULLをこのように1件・0円として数えません。
C
部署10のみ: rows_n=2、paid_n=2、avg_pay=200
NULLの給与行も表の1行です。COUNT(*)はその行を除きません。
D
部署10と部署20の両方
HAVINGの条件は各部署の非NULL給与件数が2以上で、部署20の1件は該当しません。
解説
部署10は行数3、給与が非NULLの件数2、平均(100+300)/2=200です。部署20はCOUNT(salary)=1なのでHAVINGを満たしません。NULLを給与0の1件として平均の分母へ加えないことがポイントです。
根拠資料・確認情報
対応範囲:Oracle AI Database 26ai SQL Associate(1Z0-171-JPN)
資料確認日:2026-10-29
同じレッスンの問題
問題 2
Oracle AI Database 26aiでdepartments(dept_id PRIMARY KEY)は10、20、employees(emp_id PRIMARY KEY, dept_id, status)は(1,10,'ACTIVE')、(2,20,'INACTIVE')だけである。次の結果の(dept_id, emp_id)はどれか。表示順は問わない。
SELECT d.dept_id, e.emp_id
FROM departments d
LEFT JOIN employees e
ON e.dept_id = d.dept_id AND e.status = 'ACTIVE';
問題 3
Oracle AI Database 26aiでemployees(emp_id, salary)は(1,2000)、(2,3000)、bands(label, low_pay, high_pay)は('LOW',1000,3000)、('HIGH',3000,5000)だけである。次の結合結果はどれか。金額はすべてNUMBERでNULLはない。
SELECT e.emp_id, b.label
FROM employees e JOIN bands b
ON e.salary >= b.low_pay AND e.salary < b.high_pay;
問題 4
Oracle AI Database 26aiのemployees(emp_id PRIMARY KEY, manager_id)の全行は(1,NULL)、(2,1)、(3,1)である。次の問合せで、全結果行数とmanager_id_resultが非NULLの行数の組はどれか。
SELECT e.emp_id, m.emp_id AS manager_id_result
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;