BY句がでてきました。BY句は検索列のグループ化を指示するもので、またHAVING句はグループ化を指示しているデータに条件付けを指示するキーワードです。この説明では良くわからないと思いますが、以降の例を参照してもらえれば理解できると思います。BY句はデータの並び替えを指示するキーワードです。306行が選択されました。この例ではDEPTNOが30の行を検索し、SALの降順に出力指示をしています。BY句では並び替えを行いたい列名の後ろに"ASC","DESC"のキーワードを続けます。"ASC","DESC"はそれぞれ昇順、降順の意味になります。"ASC","DESC"を指定しなければ"ASC"が指定されたものとみなされます。306行が選択されました。この例ではENAMEの昇順の指定を付け加えています。記述されている順番に評価されていきます。この場合ではSALでは降順に並べた後、さらにSALが同じ値の場合ENAMEの昇順に並び替えが行われます。9400DEPTNOでグループ化を行い、それぞれのSALの合計値を出力しています。EMP表に設定されているデータにはDEPTNOの種類が10,20,30の3種類あるためこの例の様に3行の結果が表示されます。このままではどのDEPTNOの合計値なのかわからないので実際には以下の様なSELECT文が一般的です。エラーが発生しました。BYの式がありません。*"などとしていました。BY句を指定したら、必ずグループ化を行う関数等をSELECT句に書かなければなりません。以下のSELECT文も同じ様な間違いです。エラーが発生しました。BYの式がありません。10875DEPTNOでグループ化を行い、それぞれのSALの合計値で昇順ソートした結果を出力しています。BY句にグループ化の式を指示します。9400DEPTNOでグループ化を行い、それぞれのSALの合計値が9000より大きいものを出力しています。グループ化の式の範囲指定にはHAVING句に指定します。あるエラーですが、以下の様にWHERE句に範囲指定を行うことはできません。*1行でエラーが発生しました。上記の関数の実行例を以下に示します。⇒SUM:データの合計値を返す⇒MAX,MIN:データ内の最大値及び最小値を返すグループ関数の注意点についてCOUNT()についてCOUNT()の件数をカウントする項目名の指定で、以下の2個のSQL文は異なる結果を返す場合があります。EMP;項目名が指定されている場合は、その値がNULLの行があればその値はカウントされません。COUNT(*)は単純に行のカウントを調べるときに使用するべきです。純粋に項目のNULLでないものをカウントする場合に使用します。検索の実行時間からいうと、COUNT(*)よりもCOUNT(カラム名)の方が早くなるそうです。データ登録で必ず値を入れた方が良いと思います。NULLを含めたグループ関数の結果を示す為に、以下の様なテストテーブルを考えます。4COUNT(),SUM(),AVG(),MIN(),MAX()のSQL文を以下に示します。300COUNT(DATA1)はCODE=4のNULLをカウントしていないことがわかります。SUM(DATA1),AVG(DATA1),MIN(DATA1),MAX(DATA1)は当然のことながらそれぞれ数値の値がNULLでないもののみを計算対象としています。上記のSELECT文に条件をつけると以下の様になります。0SUM(DATA1),AVG(DATA1),MIN(DATA1),MAX(DATA1)の結果は全てNULLになります。検索の結果がNULLでは処理上問題がある場合は、NVL()関数等を利用し結果を0にする。式1の値がNULLの場合は式2を値が戻り値となり、式1の値がNULLでない場合は式1の値そのものをNVLの戻り値とします。戻り値のデータ型は式1のデータ型と同様となります。文字列型の場合はVARCHAR2型となります。