データベーススペシャリスト 2015年 午前2 問02
問題文
図のデータモデルは会計取引の仕訳を表現している。“移動”がリンクする“勘定”の残高を増やす場合は金額の符号を正に、減らす場合は負にすることで、貸借平均の原理を表現する。このモデルに基づき、“勘定”表、“会計取引”表、“移動”表を定義した。勘定科目“現金”の2015年4月30日における残高を導出するためのSQL文はどれか。ここで、モデルの表記にはUMLを用い、表中の実線の下線は主キーを表す。
また、“会計取引”表には今期分のデータだけが保持される。

選択肢
ア:
SELECT SUM(金額) AS 残高 FROM 勘定、 移動、 会計取引
WHERE 勘定.勘定科目 = 移動.勘定科目 AND
会計取引.取引番号 = 移動.取引番号 AND
勘定.勘定科目 = '現金' AND
取引日 <= '2015-04-30'
イ:
SELECT 期首残高 +SUM(金額) AS 残高 FROM 勘定、 移動、 会計取引
WHERE 勘定.勘定科目 = 移動.勘定科目 AND
会計取引.取引番号 = 移動.取引番号 AND
勘定.勘定科目 = '現金' AND
取引日 <= '2015-04-30'
GROUP BY 勘定.勘定科目、 期首残高
(正解)ウ:
SELECT 残高 FROM 勘定、 移動、 会計取引
WHERE 勘定.勘定科目 = '現金' AND
取引日 <= '2015-04-30'
エ:
SELECT 残高 FROM 勘定、 移動、 会計取引
WHERE 勘定.勘定科目 = 移動.勘定科目 AND
勘定.勘定科目 = 現金' AND
取引日 <= '2015-04-30'
会計取引の仕訳データモデルに基づく勘定科目残高のSQL文作成【午前2 解説】
要点まとめ
- 結論:勘定科目「現金」の残高は期首残高に当期の移動金額合計を加算して求めるため、期首残高+SUM(金額)の計算が必要です。
- 根拠:移動テーブルの金額は増減を符号で表し、会計取引表の取引日で期間を絞り込むことで正確な残高が算出できます。
- 差がつくポイント:GROUP BY句で期首残高を含めて集計し、結合条件を正しく指定することが重要です。
正解の理由
正解のイは、勘定テーブルの期首残高に対して、移動テーブルの「現金」勘定科目かつ2015年4月30日までの取引日の金額を合計し、残高を算出しています。
また、勘定科目ごとに集計するためにGROUP BY句で勘定科目と期首残高を指定し、正しい結合条件で3つのテーブルを結合しています。
これにより、期首残高と当期の増減を正しく反映した残高が得られます。
また、勘定科目ごとに集計するためにGROUP BY句で勘定科目と期首残高を指定し、正しい結合条件で3つのテーブルを結合しています。
これにより、期首残高と当期の増減を正しく反映した残高が得られます。
よくある誤解
期首残高を加算せずに移動金額の合計だけを残高と誤認することが多いです。
また、GROUP BY句を省略すると集計結果が正しく得られません。
また、GROUP BY句を省略すると集計結果が正しく得られません。
解法ステップ
- 勘定テーブルと移動テーブルを勘定科目で結合する。
- 移動テーブルと会計取引テーブルを取引番号で結合する。
- 勘定科目を「現金」に限定し、取引日は2015年4月30日以前に絞る。
- 移動金額をSUM関数で合計し、期首残高に加算する。
- 勘定科目と期首残高でGROUP BYを行い、正しい集計を行う。
選択肢別の誤答解説
- ア:期首残高を加算していないため、残高が正しく計算されません。GROUP BY句もありません。
- イ:正解。期首残高を加算し、正しい結合と集計を行っています。
- ウ:結合条件が不十分で、移動と会計取引の結合が抜けており、集計もされていません。
- エ:勘定科目の文字列指定に誤り('現金'の前のシングルクォーテーションが抜けている)があります。結合条件も不完全です。
補足コラム
会計システムのデータモデルでは、期首残高と当期の取引による増減を正確に管理することが重要です。
SQLで残高を計算する際は、必ず期首残高を加算し、取引日の範囲指定や結合条件を正確に設定しましょう。
また、複数テーブルの結合時は主キー・外部キーの関係を理解しておくことがポイントです。
SQLで残高を計算する際は、必ず期首残高を加算し、取引日の範囲指定や結合条件を正確に設定しましょう。
また、複数テーブルの結合時は主キー・外部キーの関係を理解しておくことがポイントです。
FAQ
Q: なぜ期首残高を加算しなければならないのですか?
A: 期首残高は当期開始時点の残高であり、当期の取引による増減を加算して最終残高を求めるため必須です。
A: 期首残高は当期開始時点の残高であり、当期の取引による増減を加算して最終残高を求めるため必須です。
Q: GROUP BY句はなぜ必要ですか?
A: SUM関数で集計する際に、勘定科目ごとに集計結果を分けるためにGROUP BY句が必要です。
A: SUM関数で集計する際に、勘定科目ごとに集計結果を分けるためにGROUP BY句が必要です。
関連キーワード: SQL, 会計データモデル、残高計算、集計関数、テーブル結合、期首残高、取引日絞り込み

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

