Shoeisha Technology Media

資格Zine(しかくジン)

記事種別から探す

SQL関数振り返り ~ 文字列関数・日付関数・数値関数・変換関数・条件式・グループ関数

  • LINEで送る
  • このエントリーをはてなブックマークに追加
林 優子[著]
2016/08/09 14:00

 何度も言いますが、出題頻度が多い関数。せっかく難しいといわれる結合や副問合せを理解しても、関数が含まれていたがために失点したという残念な結果にならぬよう、前回宣言したとおり、今回は関数に関する総合問題に挑戦してみます!

変換関数の書式

早速ですが、1問目です。

問1

各年度ごとの入社人数を求めるためのSQLを作成しました。 正しい説明を選択しなさい。

SELECT TO_CHAR(hire_date,'yyyy'),COUNT(*)
FROM employees
GROUP BY TO_CHAR(hire_date,'rr');
  • a. 正常に実行され、正しく出力される
  • b. GROUP BY句でTO_CHAR関数は使用できないので、エラーが発生する
  • c. 正常に実行されるが、正しくない出力が行われる
  • d. SELECT句とGROUP BY句でTO_CHAR関数の戻す値が異なるので、エラーが発生する

実行例を見てみましょう。

SQL> SELECT TO_CHAR(hire_date,'yyyy'),COUNT(*)
  2  FROM employees
  3  GROUP BY TO_CHAR(hire_date,'rr');
SELECT TO_CHAR(hire_date,'yyyy'),COUNT(*)
               *
行1でエラーが発生しました。:
ORA-00979: GROUP BYの式ではありません。

実行例から分かるようにエラーになるので、選択肢aとcは不正解であることが分かります。 では、エラーになる理由ですが、次のことを思い出してください。

復習ポイント1

グループ処理を行う(SQL文内でグループ関数を使う)場合、SELECT句、HAVING句、ORDER BY句では、グループ関数またはGROUP BY句で指定した列を記述する。

SELECT句とGROUP BY句のどちらも、TO_CHAR関数の引数としてhire_date列を使用していますから、上記の復習ポイント1の内容を満たしているのでは?と思ったかもしれません。しかし、TO_CHAR関数の第2引数はrryyyyで一致していませんね。

rryyyyと同様に西暦を表す書式です。 yyと同様、西暦の下2桁を表しますが、表1に示す特徴があります。

表1:rr書式
  指定された西暦の下2桁
0~49 50~99
現在の
西暦の
下2桁
0~49 戻される西暦の上2桁は
今の100年
戻される西暦の上2桁は
1つ前の100年
50~99 戻される西暦の上2桁は
1つ先の100年
戻される西暦の上2桁は
今の100年

現在は西暦2016年、つまり西暦の下2桁は「0~49」なので、rr書式での「20」は今の100年である現世紀(2000年代)の「2020年」を表します。 また、rr書式での「99」は1つ前の100年である前世紀(1900年代)の「1999年」を表します。

変換関数の書式は全般に出題頻度が高いのですが、rr書式もやはり出題されやすいので、表1の内容をしっかり頭に入れておきましょう。

復習ポイント2

rr書式では、値の範囲によって西暦上2桁が決まる!

さて、問1の解説に戻りますが、GROUP BY句にTO_CHAR関数を含めた単一行関数が使用できないわけではありません(選択肢bは不正解)。本設問で大事なのは、SELECT句に使用されている列は、GROUP BY句に指定された列であるかどうかです。

引数が違えば関数が戻す値も異なりますから、GROUP BY句に単一行関数が含まれる場合、引数も同じでなければいけません。したがって、問1の正解は選択肢dです。類似問題が出題された場合は、引数も確認した上で解答しましょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 林 優子(ハヤシ ユウコ)

    日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。

バックナンバー

連載:めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール

もっと読む

この記事もオススメ

All contents copyright © 2015-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.0