SQLデータ分析の第一歩!集計・統計クエリを手を動かしながら学ぼう

SQL & DB

「データって、ただ眺めてるだけじゃ意味がないんです。」

たくさんの数字が並んでいるのに、なんとなく「情報っぽいけど、活用できてないな…」と感じたことはありませんか?

例えば、社員名簿を見ながら「この会社、平均年齢どれくらいなんだろう?」とか、売上データを見ながら「この商品の一番売れてる月っていつ?」なんて考えたこと、あるはず。

そんなときこそ、SQLの集計&統計クエリの出番です!

実は、データベースにちょっと話しかけるだけで、驚くほどスムーズに「知りたい答え」が返ってくるんですよ。

この記事では、初心者の方でもすぐに使える「SQLの集計&統計クエリ」を、手を動かしながら学べる形でご紹介します!

さあ、データの世界に飛び込んで、数字を“読む”楽しさを味わってみませんか?

  1. データ分析って何?SQLでできることをざっくり解説
    1. データ分析って、具体的にどんなこと?
    2. ExcelとSQLの違いって?
    3. SQLで何ができるの?
    4. まとめ:SQLは“データと対話するツール”
  2. まずは基本の集計関数から!データをざっくり見てみよう
    1. 実例:社員データをざっくり分析してみよう!
    2. 売上データを使って、SUM() の威力を体感!
    3. ヒント:NULLには要注意!
    4. ところで… COUNT(*) と COUNT(カラム名) の違いって?
    5. まとめ:まずは“全体をざっくり把握”する習慣を!
  3. データをグループ化する!GROUP BYの基本
    1. GROUP BYって、どんなしくみ?
    2. 演習①:「部署ごとの平均年齢を出そう!」
    3. 応用:CASE式と組み合わせて、年代グループを作ろう!
    4. よくあるミスあるある
    5. まとめ:GROUP BYを使えば「傾向」が見える!
  4. 集計結果をフィルタリング!HAVINGの使い方
    1. HAVINGの基本構文
    2. 実践①:10人以上いる部署だけ表示したい
    3. 実践②:平均給与が30万円以上の部署だけ
    4. よくある間違いあるある
    5. WHEREとHAVING、どう使い分ける?
    6. まとめ:HAVINGは“集計の後に判断する”フィルター!
  5. 順位・ランキングをつけてみよう!(ORDER BY & LIMIT)
    1. ORDER BYの基本構文
    2. 実践①:年齢順に社員を並べてみよう!
    3. 実践②:売上上位5商品を表示(LIMITで絞る)
    4. 実践③:複数の列で並べてみよう(セカンダリソート)
    5. LIMITとOFFSETで「◯件目から◯件」もできる!
    6. まとめ:ORDER BY & LIMITで、データに“表情”が出る!
  6. データを分類して分析しやすく!CASEの活用
    1. CASEの基本構文
    2. 実践①:年齢を“年代カテゴリ”に分けてみよう
    3. 実践②:給与額に応じて“収入ランク”をつけよう
    4. CASE × GROUP BYでさらに分析的に!
    5. よくあるミス&注意点
    6. まとめ:CASEは“データに意味をつける”魔法のツール!
  7. SQLでデータ分析をする楽しさを実感しよう!
    1. SQLで分析できる世界は、まだまだ広い!
    2. ここから先のステップは?
    3. SQLで“見えなかったこと”が見えるようになる感覚
    4. まとめ:「データが語りかけてくる瞬間」を楽しもう!

データ分析って何?SQLでできることをざっくり解説

「データ分析って聞くと、なんか専門家だけの世界って感じがしませんか?」

でも、実は私たちの身の回りにもデータ分析の場面はあふれています。

たとえば——

  • 「先月のブログPVってどれくらいだったっけ?」
  • 「営業成績がいいのって、どの地域?」
  • 「30代の社員って何人いるの?」

こういう「ちょっと知りたいこと」、全部がデータ分析のはじまりなんです!

データ分析って、具体的にどんなこと?

ざっくり分けると、こんなことを指します

ステップ内容
データの取得欲しい情報を集める(例:SELECT文など)
集計件数、平均、合計などを求める(COUNT, AVG など)
比較・傾向の分析グループごとに比較したり、ランキングにする
可視化(必要なら)グラフや表にして「見える化」する

SQLはこの中でも「データの取得・集計・比較」までを得意としています!

特に「データベースに入っている情報」に対しては、これ以上ないくらい強いです。

ExcelとSQLの違いって?

項目Excel(表計算)SQL(データベース言語)
データ量数千〜数万件が限界かもSQL(データベース言語)
操作方法手動でポチポチ or 関数入力クエリ(命令文)を記述して操作
得意なことグラフ・可視化が得意複雑な抽出・集計・組み合わせが得意
学習コスト少しとっつきやすい 最初はコードに慣れる必要あり

Excelが「紙の台帳」、SQLが「司令塔に指示を出すイメージ」です!

慣れればSQLのほうが、正確で、再利用しやすく、スマートに処理できます!

SQLで何ができるの?

「SQLってデータを取り出すだけじゃないの?」と思っていたそこのあなた。

実は、こんなことができます

  • 顧客数・売上・在庫などの件数や合計を集計できる
  • 部署別・地域別などグループごとの平均・最大・最小を分析できる
  • 一番売れてる商品・一番若い社員などランキングやTOP◯の抽出もお手の物
  • 年代別・性別・カテゴリ別などに分類して傾向を把握できる

つまり、「数字を意味ある形に変える力」=SQLの分析力なんです!

まとめ:SQLは“データと対話するツール”

SQLは難しい言語ではありません。

「このデータから何を知りたいのか?」を明確にして、その気持ちをクエリに変えるだけなんです。

次の章からは、実際にクエリを書きながら、 「あれ、私ちょっとデータ分析できてる…!」を一緒に体験していきましょう!

まずは基本の集計関数から!データをざっくり見てみよう

「なんだか大量のデータがあるけど、何がどうなってるのかよくわからない…」

そんなときに大活躍するのが、SQLの“集計関数”たちです!

この章では、以下の5つの基本的な集計関数を紹介します。

関数意味 よくある使いどころ
COUNT()件数を数えるレコード数、人数、件数をカウントしたいとき
SUM()合計を計算する売上合計、金額の合計など
AVG()平均値を求める平均年齢、平均金額など
MIN()最小値を求める最年少、最低価格など
MAX()最大値を求める最年長、最高金額など

実例:社員データをざっくり分析してみよう!

例えば、こんなテーブルがあるとします

employees テーブル

nameagesalary
佐藤28320000
鈴木35410000
高橋41380000

この表から、「社員数・平均年齢・最低年齢・最高年齢」をまとめて見たいときはこう書きます

SQL
SELECT 
  COUNT(*) AS 社員数,
  AVG(age) AS 平均年齢,
  MIN(age) AS 最年少,
  MAX(age) AS 最年長
FROM employees;

結果は

社員数平均年齢最年少最年長
334.62841

なんとこの1行で、“どんな人たちが働いているのか”のざっくり全体像がつかめてしまいます!

会社の人事が見たら「お、若手多いじゃん」とわかるようになりますね。

売上データを使って、SUM() の威力を体感!

次は、ちょっと現場感のあるデータを使ってみましょう。

以下のような売上データがあるとします

sales テーブル

item price
パン200
コーヒー300
サンドイッチ450
SQL
SELECT SUM(price) AS 合計売上 FROM sales;

結果:合計売上が 950円と表示されます。

小規模なカフェでも、日報を作るのにバッチリ使えそうですね!

ヒント:NULLには要注意!

実は、AVGやSUMなどの関数は、NULL(空欄)を計算対象に含みません!

「給料が未入力な人がいると平均が変わる」なんてこともあるので、データがちゃんと入っているかチェックする癖をつけておきましょう

ところで… COUNT(*) と COUNT(カラム名) の違いって?

SQL
SELECT COUNT(*)       -- → レコード全体をカウント  
SELECT COUNT(salary)  -- → salaryがNULLじゃない行だけカウント

この違い、意外と見落とされがちです!

カラムを指定すると「値が入ってる行だけ」を数えるので、用途によって使い分けましょうね。

まとめ:まずは“全体をざっくり把握”する習慣を!

いきなり複雑な分析をする必要はありません。

SQLでデータのボリューム感や傾向をざっくり見ることが、分析の第一歩です。

次章では、ここで学んだ集計関数を、部署別・年代別などに“グルーピング”して集計していきますよ!

SQLの“情報整理術”、本領発揮です。

データをグループ化する!GROUP BYの基本

たとえば、社員データがどーんと並んでいたとして

—— 「部署ごとに社員数を数えたい」 「年代ごとに平均給与を出したい」 そんなときに登場するのが、GROUP BY(グループ・バイ)です!

これを使えば、データをまるで分類BOXに仕分けるようなイメージで整理できます!

GROUP BYって、どんなしくみ?

まずは基本の書き方

SQL
SELECT グループ分けしたい列, 集計関数(対象列)
FROM テーブル名
GROUP BY グループ分けしたい列;

例として、部署ごとの社員数を知りたいならこちら

SQL
SELECT department, COUNT(*) AS 社員数
FROM employees
GROUP BY department;

このクエリで、開発部には何人、営業部には何人…という“まとめ情報”が取れます!

いきなりベテラン人事担当のような目線ですね。

演習①:「部署ごとの平均年齢を出そう!」

SQL
SELECT department, AVG(age) AS 平均年齢
FROM employees
GROUP BY department;

このSQLで、部署ごとの“空気感”が見えてくる!

「この部署、やたら若い…新卒配属かな?」みたいな観察ができちゃいます。

応用:CASE式と組み合わせて、年代グループを作ろう!

SQLの魔法「CASE」と組み合わせれば、年齢から年代を算出して集計もできます。

SQL
SELECT 
  CASE
    WHEN age BETWEEN 20 AND 29 THEN '20代'
    WHEN age BETWEEN 30 AND 39 THEN '30代'
    ELSE '40代以上'
  END AS 年代,
  COUNT(*) AS 人数
FROM employees
GROUP BY 年代;

結果は…

年代人数
20代 3
30代4
40代以上2

まるで「人材マーケティング視点」を手に入れたような気分になりますね。

よくあるミスあるある

  • SELECT に GROUP BY対象以外のカラムを書いてエラーに → 使えるのは「グループ化した列」と「集計関数を使った列」だけ!
  • GROUP BY の前に WHERE を入れる場合、順序に注意!

まとめ:GROUP BYを使えば「傾向」が見える!

  • 個別データの「その人」ではなく、グループ全体の性質を捉える視点にステップアップ!
  • ビジネス現場では「部門別」「地域別」「商品カテゴリ別」などGROUP BY大活躍です。
  • あなたもデータを“上から俯瞰する視点”を手に入れてきましたよ…!

集計結果をフィルタリング!HAVINGの使い方

GROUP BYを使えば、部署ごとの人数や売上合計など「グループごとの傾向」が見えるようになりましたね。

でも、たとえばこんなことを考えたことはありませんか?

  • 「社員数が10人以上の部署だけ表示したい」
  • 「平均年齢が30歳以上のグループに絞りたい」
  • 「合計売上が50万円超えの店舗だけ抽出したい」

…そう、集計したあとに“条件で絞り込む”ことがしたいんです!

そこで登場するのが、HAVING句 です!

HAVINGの基本構文

SQL
SELECT グループ列, 集計関数(列)
FROM テーブル名
GROUP BY グループ列
HAVING 集計関数(列) 条件;

ポイント

  • WHERE は 集計“前”の個別データに条件をかける
  • HAVING は 集計“後”のグループ結果に条件をかける

実践①:10人以上いる部署だけ表示したい

SQL
SELECT department, COUNT(*) AS 社員数
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

このクエリでは、社員数が10人以上の部署だけが表示されます。

まるで「それなりに大所帯な部署だけ出して!」とお願いする感じですね。

実践②:平均給与が30万円以上の部署だけ

SQL
SELECT department, AVG(salary) AS 平均給与
FROM employees
GROUP BY department
HAVING AVG(salary) >= 300000;

給与の傾向で部署を比較するのも、HAVINGが得意とするところ!

「お、営業部って思ったより高給取りだな…」なんて気づきがあるかも。

よくある間違いあるある

SQL
-- ❌ エラー
WHERE COUNT(*) >= 10;

このように 集計関数をWHEREに使うとエラーになります。

WHEREはあくまで「集計する前の個々のデータ」に使うもの。

集計してから絞りたいときは、必ずHAVING を使いましょう!

WHEREとHAVING、どう使い分ける?

目的使う句
個々のデータで絞り込むWHERE
集計後の結果で絞り込むHAVING
両方必要なときは…?両方使える(WHERE→GROUP BY→HAVING の順)

例えば「30歳以上の社員だけ集計し、その中から10人以上いる部署だけ表示したい」 そんなときはこんなふうに書きます

SQL
SELECT department, COUNT(*) AS 社員数
FROM employees
WHERE age >= 30
GROUP BY department
HAVING COUNT(*) >= 10;

まとめ:HAVINGは“集計の後に判断する”フィルター!

  • WHEREは“データそのもの”への条件
  • HAVINGは“集計結果に対する”条件
  • 一緒に使うことで、高度なデータ分析ができるようになる!

これであなたも、SQLを使って「見たいグループだけを的確に抽出する」スキルを習得です!

順位・ランキングをつけてみよう!(ORDER BY & LIMIT)

たくさんのデータを見ていると、ふとこんなことを考えたくなりませんか?

「この中で一番年収が高い人は?」

「売上トップ5の商品は?」

「応募者の上位3名を表示したい!」

そんな願いを叶えるのが、ORDER BY と LIMIT のコンビです!

この章では、データの並び順を自在にコントロールする技術を習得していきます。

ORDER BYの基本構文

SQL
SELECT 列1, 列2
FROM テーブル名
ORDER BY 並べたい列 [ASC|DESC];
  • ASC:昇順(小さい順)※省略可能!
  • DESC:降順(大きい順)

実践①:年齢順に社員を並べてみよう!

SQL
SELECT name, age
FROM employees
ORDER BY age DESC;

このクエリを実行すると、年齢が高い順に社員がズラリと並びます。

会議室で「ベテラン勢がズラッと座っている」みたいな並びを想像してください。

逆に若い順に並べたいときは ASC を使いましょう

SQL
ORDER BY age ASC;

実践②:売上上位5商品を表示(LIMITで絞る)

SQL
SELECT item_name, sales
FROM products
ORDER BY sales DESC
LIMIT 5;

このクエリは、売上が多い順に5件だけ表示してくれます。

いわば「ランキング機能」。このコンボは本当に使いどころ満載です!

マーケティング担当さんにも好かれます。

実践③:複数の列で並べてみよう(セカンダリソート)

SQL
SELECT name, department, age
FROM employees
ORDER BY department ASC, age DESC;

こちらは「部署名の昇順 → 同じ部署内では年齢の高い順」で並べるパターン。

POINT:並び順に“優先順位”をつけられるので、 「部署ごとのベテラン」が一目でわかる並びになります!

LIMITとOFFSETで「◯件目から◯件」もできる!

SQL
SELECT name
FROM employees
ORDER BY age DESC
LIMIT 5 OFFSET 5;

このクエリは、「年齢順に並べた中の“6番目~10番目”を表示」します。

大量データから「2ページ目の5件」みたいな場面で便利です。

まとめ:ORDER BY & LIMITで、データに“表情”が出る!

  • 順位やランキングを簡単に作れる
  • 昇順/降順を使い分けて「上から見る/下から見る」ができる
  • LIMITやOFFSETで、ページ分割・ピックアップも可能

これであなたも、SQLで「見せたい順番にデータを並べられる」スキルを手に入れました!

次は、いよいよ分類&条件分岐の花形:CASE文を使って、「分析しやすい形に整える」技術を学んでいきましょう!

データを分類して分析しやすく!CASEの活用

ここまでで、データを数える・まとめる・並べることができるようになりました。

…次なるスキルは、“分類(カテゴリ分け)”です!

例えば——

  • 年齢を「20代・30代・40代」に分類したい
  • 金額を「高・中・低」にランク分けしたい
  • ステータスを「達成/未達成」で表示したい

そんなときに活躍するのが、CASE式(条件分岐)です。

まさにSQL版の「もし〜なら〜、そうでなければ〜」の構文!

CASEの基本構文

SQL
CASE
  WHEN 条件 THEN 値1
  WHEN 条件 THEN 値2
  ...
  ELSE デフォルト値
END

この構文をSELECT文の中に書けば、任意の基準で分類された新しい列を作ることができます!

実践①:年齢を“年代カテゴリ”に分けてみよう

SQL
SELECT 
  name,
  age,
  CASE
    WHEN age BETWEEN 20 AND 29 THEN '20代'
    WHEN age BETWEEN 30 AND 39 THEN '30代'
    ELSE '40代以上'
  END AS 年代
FROM employees;
nameage年代
佐藤2820代
鈴木3530代
高橋4440代以上

年齢 → 年代に変換するだけで、分析しやすさが一気にアップ!

グラフ化やレポートでも活用できますね。

実践②:給与額に応じて“収入ランク”をつけよう

SQL
SELECT 
  name,
  salary,
  CASE
    WHEN salary >= 500000 THEN '高'
    WHEN salary >= 300000 THEN '中'
    ELSE '低'
  END AS 給与ランク
FROM employees;

「金額」→「ランク」 にすると、表全体の傾向がパッと見えてきます。

マーケ施策や人材戦略の分析にも役立ちますよ。

CASE × GROUP BYでさらに分析的に!

せっかく作ったカテゴリ列、GROUP BYで集計もしてみましょう

SQL
SELECT 
  CASE
    WHEN age < 30 THEN '20代'
    WHEN age < 40 THEN '30代'
    ELSE '40代以上'
  END AS 年代,
  COUNT(*) AS 人数
FROM employees
GROUP BY 年代;

これで、「どの年代が多いのか?」が一目で把握できます!

データの分類 → 可視化 → 戦略立案という、分析思考の流れに近づいてきましたね。

よくあるミス&注意点

  • CASEの中で比較演算子(<, >=)などの条件を書き忘れると、ぜんぶ ELSE に流れます
  • 複数のCASE式を組み合わせるときは、ENDでしっかり閉じるのを忘れずに!

まとめ:CASEは“データに意味をつける”魔法のツール!

  • 生データにストーリーや意味を与える
  • 分類することで「全体の構造」が見えてくる
  • GROUP BYやHAVINGと組み合わせて深い分析も可能に!

次章では、ここまで学んだ集計・並べ替え・分類テクニックを組み合わせて、 実践的なクエリの設計や演習問題にチャレンジしていきましょう!

SQLでデータ分析をする楽しさを実感しよう!

ここまで、SQLによる集計・分類・並び替えなど、データ分析の基礎スキルをしっかり身につけてきました。

SELECT文をただ“読む”だけだった頃に比べて、今のあなたは… データに命令できる!問いかけられる!対話できる!

まさに、“数字を読み解く力”が手に入りつつある状態です。

SQLで分析できる世界は、まだまだ広い!

今回の記事では、以下のようなクエリをマスターしてきました

  • COUNT, SUM, AVG, MIN, MAX といった集計関数
  • GROUP BY によるグループごとの集計
  • HAVING による集計後の絞り込み
  • ORDER BY と LIMIT でランキングや順位づけ
  • CASE 文でデータの分類やラベリング

これらを組み合わせれば、「部署別の平均給与を出し、30万円以上の部署だけを年齢順で表示」といった複合的なクエリも書けるようになります。

ここから先のステップは?

「もっと分析力を伸ばしたい!」という方には、こんなステップがおすすめです

ステップ内容
ウィンドウ関数(OVER, RANKなど)順位・移動平均・累積など、さらに高度な分析が可能に!
サブクエリ・共通テーブル式(CTE)複雑な条件や一時的なデータを駆使した処理が書けるように!
可視化ツール(Tableau、Excel、Lookerなど)と連携SQL+グラフで、伝わる分析結果を!

SQLで“見えなかったこと”が見えるようになる感覚

例えば、なんとなく売れてると思っていた商品が、月別集計で「実は3月だけ異常に売れてた」と判明したり、 営業成績が悪いと思っていた部署が、平均年齢が最年少と分かって「実はこれから伸びそう」と判断できたり。

SQLは、主観や感覚ではなく“数字で語れる自分”を育ててくれます。

これは一度体験すると、もう戻れない面白さです!

まとめ:「データが語りかけてくる瞬間」を楽しもう!

  • SQLで分析できるようになると、「ちょっと見てみよう」がどんどん増えていく
  • 知識よりも、“手を動かして身につけた感覚”が最大の財産になる
  • 「分析って楽しいかも」と思えた今が、最高のスタート地点!

この記事が、あなたのSQLスキルの第一歩、そして“データと対話する力”の土台になったら嬉しいです!

decopon
decopon

「SQLでデータ分析なんて難しそう…」と思っていた方にも、少しでも「お、いけるかも?」と感じてもらえていたら嬉しいです。

分析って、特別なスキルじゃありません。 「ちょっと気になる」をクエリにしてデータに聞いてみる。 それだけで、数字が“語りだす”楽しさを味わえるようになります。

コメント

タイトルとURLをコピーしました