Oracle Database SQL(ORACLE MASTER Silver SQL 2019) 無料問題 5 / 10 ・ 分野6: グループ関数を使用した集計データのレポート
employees 表の department_id は、10 が2行、20 が3行、30 が1行である。次の SELECT 文の結果として正しいものはどれか。 SELECT COUNT() FROM employees GROUP BY department_id;
- 部門ごとの3行が返る。行の並びは保証されないので、並べるには ORDER BY が要る
- 1行(6)が返る:SELECT 句に書かない列ではグループ化されない
- department_id の昇順に並んだ3行が返る。GROUP BY は並べ替えも行う
- エラーになる:GROUP BY の列は SELECT 句にも書く必要がある
正解と解説を見る
正解: A
正解の理由
SQL Language Reference の SELECT は、GROUP BY の式が FROM 句の表の列を含めばよく、「その列が SELECT 句に現れるかどうかにかかわらない」と定める。また「GROUP BY 句は行をグループ化するが、結果の順序は保証しない」。部門ごとに1行の3行(2、3、1)が返り、順序は決まっていない。
違う選択肢
「エラーになる:GROUP BY の列は SELECT 句にも書く必要がある」… GROUP BY の式は SELECT 句に書かなくてもよい。公式は、GROUP BY の式が SELECT 句に現れるかどうかにかかわらず、FROM 句の列を指定できると定める
「1行(6)が返る:SELECT 句に書かない列ではグループ化されない」… GROUP BY の列を SELECT 句に書かなければ全体を1グループにする、と読んだ説明である。グループ化は GROUP BY の式で決まり、SELECT 句の内容には左右されない
「department_id の昇順に並んだ3行が返る。GROUP BY は並べ替えも行う」… GROUP BY は行をグループにまとめるだけで、結果の並び順は保証しない。順序が要るときは ORDER BY を指定する
押さえどころ
GROUP BY の列を SELECT 句に出さない問合せも書ける。ただし、どの行がどの部門のものか分からなくなる。並び順を決めるのは ORDER BY だけである。
Oracle Database SQL(ORACLE MASTER Silver SQL 2019)の演習アプリ(無料10問・全問は購入で)へ