SlideShare a Scribd company logo
1 of 28
SQLを書こう
実践編 - 合計残高試算表
なかじまゆうじ
はじめに
このスライドは、SQLの構文を覚えた新人に、
実際にSQL文を書くときの考え方を説明するた
めに作成したものです。
標準SQLを想定していますが、一部、SQL
Serverに依存している部分があります。
「合計残高試算表」ってなに?
会計の帳票の1つです。
仕訳帳を勘定科目ごとに貸借金額を合計した
ものです。
「借方残高」「借方合計」「勘定科目名」
「貸方合計」「貸方残高」の5列で構成され
ます。
「合計残高試算表」ってなに?
「借方合計」には、勘定科目ごとの借方の合
計金額が入ります。
「貸方合計」には、勘定科目ごとの貸方の合
計金額が入ります。
「合計残高試算表」ってなに?
「借方残高」と「貸方残高」には、勘定科目
ごとの残高が入ります。残高が借方にある
場合には「借方残高」、貸方にある場合に
は「貸方残高」に入ります。
「残高」ってなんだっけ?
借方金額と貸方金額の大きい方から小さい方
の金額を引いた残りです。
借方の方が大きければ借方に残高がある状態、
貸方の方が大きければ貸方に残高がある状
態です。
ということは
勘定科目ごとの借方合計金額と貸方合計金額が
あれば(これが合計試算表です)、残高の部分
は簡単に作れます。
つまり、こんな感じ。
select
(借方合計 - 貸方合計) as 借方残高,
勘定科目名,
(貸方合計 - 借方合計) as 貸方残高
from 合計試算表
小さい方の貸借に、
マイナス金額が出ちゃうじゃん。。。
小さい方は出ないようにしよう。
select
case
when 借方合計 > 貸方合計 then (借方合計 - 貸方合計)
else null
end as 借方残高,
勘定科目名,
case
when 借方合計 < 貸方合計 then (貸方合計 - 借方合計)
else null
end as 貸方残高
from 合計試算表
残高はできた。
あとは合計試算表をどう作るか。
「仕訳帳」ってどんな構造?
本来は「借方勘定科目と金額」「貸方勘定科
目と金額」が、それぞれ複数行存在するも
のです。
今回は、「勘定科目名」「貸借」「金額」の
3列のテーブルと考えます。
「勘定科目ごとの合計金額」なら
select
勘定科目名,
sum(金額) as 合計金額
from 仕訳帳
group by 勘定科目名
「勘定科目ごとの借方合計金額」なら
select
勘定科目名,
sum(金額) as 借方合計
from 仕訳帳
where 貸借 = '借方'
group by 勘定科目名
「勘定科目ごとの貸方合計金額」なら
select
勘定科目名,
sum(金額) as 貸方合計
from 仕訳帳
where 貸借 = '貸方'
group by 勘定科目名
両方繋ぐと?
select 借方.借方合計, 借方.勘定科目名, 貸方.貸方合計
from (
select 勘定科目名, sum(金額) as 借方合計
from 仕訳帳
where 貸借 = '借方'
group by 勘定科目名
) as 借方
inner join (
select 勘定科目名, sum(金額) as 貸方合計
from 仕訳帳
where 貸借 = '貸方'
group by 勘定科目名
) as 貸方
on 貸方.勘定科目名 = 借方.勘定科目名
片方にしかない勘定科目がなくなる!
left outerだと?
select 借方.借方合計, 借方.勘定科目名, 貸方.貸方合計
from (
select 勘定科目名, sum(金額) as 借方合計
from 仕訳帳
where 貸借 = '借方'
group by 勘定科目名
) as 借方
left outer join (
select 勘定科目名, sum(金額) as 貸方合計
from 仕訳帳
where 貸借 = '貸方'
group by 勘定科目名
) as 貸方
on 貸方.勘定科目名 = 借方.勘定科目名
貸方にしかない科目がなくなる!
full outerだと?
select 借方.借方合計, 借方.勘定科目名, 貸方.貸方合計
from (
select 勘定科目名, sum(金額) as 借方合計
from 仕訳帳
where 貸借 = '借方'
group by 勘定科目名
) as 借方
full outer join (
select 勘定科目名, sum(金額) as 貸方合計
from 仕訳帳
where 貸借 = '貸方'
group by 勘定科目名
) as 貸方
on 貸方.勘定科目名 = 借方.勘定科目名
貸方にしかない勘定科目の
勘定科目名が出ない!
最終的に、こんな感じ。
select 借方.借方合計, coalesce(借方.勘定科目名, 貸方.勘定科目名) as 勘定科目名, 貸方.貸方合計
from (
select 勘定科目名, sum(金額) as 借方合計
from 仕訳帳
where 貸借 = '借方'
group by 勘定科目名
) as 借方
full outer join (
select 勘定科目名, sum(金額) as 貸方合計
from 仕訳帳
where 貸借 = '貸方'
group by 勘定科目名
) as 貸方
on 貸方.勘定科目名 = 借方.勘定科目名
仕訳帳がfromに2回も登場して、遅そう。
余談:遅いSQLの特徴
遅い(実行時間が長い)SQLになる条件はい
ろいろありますが、「from句に登場するテ
ーブル(実表)の数が多い」場合も遅くな
りがちです。
「実表」というのが曲者で、viewの場合はそ
の中に含まれる実表の数になります。
ということで、別解。
select
sum(case when 貸借 = '借方' then 金額 else 0 end) as 借方合計,
勘定科目名,
sum(case when 貸借 = '貸方' then 金額 else 0 end) as 貸方合計
from 仕訳帳
group by 勘定科目名
最終的に合計残高試算表は
select
case when 借方合計 > 貸方合計 then (借方合計 - 貸方合計) else null end as 借方残高,
借方合計,
勘定科目名,
貸方合計,
case when 借方合計 < 貸方合計 then (貸方合計 - 借方合計) else null end as 貸方残高
from (
select
sum(case when 貸借 = '借方' then 金額 else 0 end) as 借方合計,
勘定科目名,
sum(case when 貸借 = '貸方' then 金額 else 0 end) as 貸方合計
from 仕訳帳
group by 勘定科目名
) as 合計試算表
まとめ
joinのときは、行がなくならないように気を
つける。
事前に絞り込んでおかなくても、必要な情報
を1つの行に並べられれば、select句でなん
とかなる。
欲しいテーブルがなければ、作る。
from句に登場する実表の数に気をつける。
おしまい

More Related Content

What's hot

数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜
数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜
数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜aaaa mmmm
 
Customized Regression Model for Airbnb Dynamic Pricing
Customized Regression Model for Airbnb Dynamic PricingCustomized Regression Model for Airbnb Dynamic Pricing
Customized Regression Model for Airbnb Dynamic Pricingharmonylab
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発miekobari
 
大規模データに基づく自然言語処理
大規模データに基づく自然言語処理大規模データに基づく自然言語処理
大規模データに基づく自然言語処理JunSuzuki21
 
20221116_テスト自動化プラットフォーム mabl はいいぞ!
20221116_テスト自動化プラットフォーム mabl はいいぞ!20221116_テスト自動化プラットフォーム mabl はいいぞ!
20221116_テスト自動化プラットフォーム mabl はいいぞ!Shohei Oda
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 FallYoshitaka Kawashima
 
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像 MS Interact 2019 - Azureサービスで実現するセキュリティ全体像
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像 Ai Hayakawa
 
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送Google Cloud Platform - Japan
 
Issueの書き方と伝え方
Issueの書き方と伝え方Issueの書き方と伝え方
Issueの書き方と伝え方Rina Fukuda
 
20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方Amazon Web Services Japan
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 Koichiro Matsuoka
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기YEONG-CHEON YOU
 
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe SYSTEMS DESIGN Co.,Ltd. Japan)
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe  SYSTEMS DESIGN Co.,Ltd. Japan) ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe  SYSTEMS DESIGN Co.,Ltd. Japan)
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe SYSTEMS DESIGN Co.,Ltd. Japan) 聡 鳥谷部
 
Dockerが抱えるネットワークの課題
Dockerが抱えるネットワークの課題Dockerが抱えるネットワークの課題
Dockerが抱えるネットワークの課題Asuka Suzuki
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話marika_hotani
 

What's hot (20)

数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜
数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜
数学カフェAdvent calendar2017 12_18〜圏論に於ける準同型定理〜
 
Customized Regression Model for Airbnb Dynamic Pricing
Customized Regression Model for Airbnb Dynamic PricingCustomized Regression Model for Airbnb Dynamic Pricing
Customized Regression Model for Airbnb Dynamic Pricing
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発
 
大規模データに基づく自然言語処理
大規模データに基づく自然言語処理大規模データに基づく自然言語処理
大規模データに基づく自然言語処理
 
20221116_テスト自動化プラットフォーム mabl はいいぞ!
20221116_テスト自動化プラットフォーム mabl はいいぞ!20221116_テスト自動化プラットフォーム mabl はいいぞ!
20221116_テスト自動化プラットフォーム mabl はいいぞ!
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
 
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像 MS Interact 2019 - Azureサービスで実現するセキュリティ全体像
MS Interact 2019 - Azureサービスで実現するセキュリティ全体像
 
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
 
Akka streams vs spark structured streaming
Akka streams vs spark structured streamingAkka streams vs spark structured streaming
Akka streams vs spark structured streaming
 
Issueの書き方と伝え方
Issueの書き方と伝え方Issueの書き方と伝え方
Issueの書き方と伝え方
 
20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
URLで遊ぼう
URLで遊ぼうURLで遊ぼう
URLで遊ぼう
 
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe SYSTEMS DESIGN Co.,Ltd. Japan)
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe  SYSTEMS DESIGN Co.,Ltd. Japan) ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe  SYSTEMS DESIGN Co.,Ltd. Japan)
ハンドノート T字形ERモデル セミナー資料 (Author; S.Toriyabe SYSTEMS DESIGN Co.,Ltd. Japan)
 
Dockerが抱えるネットワークの課題
Dockerが抱えるネットワークの課題Dockerが抱えるネットワークの課題
Dockerが抱えるネットワークの課題
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話
プログラミング初心者がOpenCVと機械学習でOCRエンジン自作に挑戦する話
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (8)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

SQLを書こう (実践編 - 合計残高試算表)