COBOLで学ぶSELECT文のORDER BY・GROUP BY活用法!初心者でもわかるデータ集計
生徒
「先生、COBOLでデータベースからデータを取得するとき、並べ替えや集計はできますか?」
先生
「もちろんです。SQLのORDER BYやGROUP BYを使うと、データを並べ替えたり、特定の条件で集計することができます。」
生徒
「具体的にはどう書くんですか?」
先生
「それでは、順番にわかりやすく説明していきます。」
1. ORDER BYとは?
COBOLでSQLを使う場合、ORDER BYは検索結果を特定の順序で並べ替えるための句です。例えば社員テーブルから社員を年齢順に取得したい場合に便利です。並べ替えを理解すると、データを見やすく整理して出力することができます。
2. GROUP BYとは?
GROUP BYは、特定の列でデータをグループ化し、集計関数(SUM, COUNT, AVGなど)と組み合わせて使用します。たとえば、部署ごとの社員数を調べる場合に使います。データの集計を行うことで、分析やレポート作成が簡単になります。
3. ORDER BYの基本例
WORKING-STORAGE SECTION.
01 EMP-NAME PIC X(20).
01 EMP-AGE PIC 9(3).
PROCEDURE DIVISION.
EXEC SQL
SELECT EMP_NAME, AGE
INTO :EMP-NAME, :EMP-AGE
FROM EMPLOYEE
ORDER BY AGE DESC
END-EXEC.
IF SQLCODE = 0
DISPLAY "取得成功:" EMP-NAME " (年齢:" EMP-AGE ")"
ELSE
DISPLAY "取得失敗:" SQLCODE
END-IF.
取得成功:山田太郎 (年齢:45)
取得成功:田中花子 (年齢:38)
この例では、社員を年齢の降順で並べ替えて取得しています。ASCを使うと昇順、DESCを使うと降順になります。
4. GROUP BYの基本例
WORKING-STORAGE SECTION.
01 DEPT-NAME PIC X(10).
01 EMP-COUNT PIC 9(4).
PROCEDURE DIVISION.
EXEC SQL
SELECT DEPT, COUNT(*)
INTO :DEPT-NAME, :EMP-COUNT
FROM EMPLOYEE
GROUP BY DEPT
END-EXEC.
IF SQLCODE = 0
DISPLAY DEPT-NAME " 部署の社員数:" EMP-COUNT
ELSE
DISPLAY "取得失敗:" SQLCODE
END-IF.
営業 部署の社員数:12
開発 部署の社員数:8
この例では、部署ごとに社員数を集計しています。部署名(DEPT)でグループ化し、COUNT関数で社員数を計算しています。
5. ORDER BYとGROUP BYを組み合わせる
ORDER BYとGROUP BYは組み合わせることができます。例えば部署ごとの社員数を降順に並べたい場合です。
EXEC SQL
SELECT DEPT, COUNT(*)
INTO :DEPT-NAME, :EMP-COUNT
FROM EMPLOYEE
GROUP BY DEPT
ORDER BY COUNT(*) DESC
END-EXEC.
このSQLでは、社員数の多い部署から順に結果が表示されます。分析レポートや統計データ作成の際に非常に役立ちます。
6. 初心者向けポイント
ORDER BYやGROUP BYを使うことで、データを見やすく整理したり、集計して分析することができます。SQLコードをCOBOLに埋め込む際には、必ずEXEC SQLとEND-EXECで囲むこと、またSQLCODEでエラーを確認することが安全です。初心者でも順番に理解しながら書くことで、データベース操作が楽になります。