【SQL基礎】havingの使い方を学ぶ。countなどを使用する

user

SQL文で集約したものに条件を付けたい場合があると思います。

そんな時はHAVING句が使用できます。

条件を付けたい場合だとWHERE関数を思いつくと思いますが、WHERE句はレコード単体に対してのみしか条件を付ける事ができません。

集約関数を使用する平均値が〇〇、合計値が〇〇といった条件はWHEREではできません。

そこででてくるのがHAVING句です。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やアプリやWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

HAVING句の使い方を学んで行きましょう!

目次

SQLでhavingの使い方を学ぶ。countなどを使用する

SQLでhavingの使い方を学ぶ。countなどを使用する

SQLでHaving句を使用する時の基礎構文

SQLでHaving句の基本構文は以下となります。

SELECT 集約関数 FROM テーブル名 GROUP BY カラム名 HAVING 集約関数;

集約関数とは平均のAVG関数や合計のSUM関数、数を数えるCOUNT関数などです。

集約関数を使用できるのは以下の3つです。

集約関数が使用できる3句
  • SELECT句
  • HAVING句
  • ORDER BY句

WHEREで集約関数は使用できないのでHaving句を使用します!

SQLでHAVING句を使用する時の注意点

HAVING句を使用する時の注意点
  • 位置はGROUP BY句の後
  • Having句で使用できるものに制限あり

一つ目の注意点として位置でHAVING関数が使用できるのはGROUP BY句の後ろになります。

二つ目の注意点はHaving関数で使用できる要素が限られています。

Having関数で使用できる要素
  • 定数
  • 集約関数
  • GROUP BY句で指定したカラム

SQLでhavingとCountを使ってみる

traning

では実際にSQLでHaving句を使用して実施してみます

以下のテーブルがあったとします。

SQLのテーブル_点数
SQLのテーブル_点数

それぞれのチームの人数が4人のチームを表示させてみます。

下のSQL文を実行します。

SELECT `チーム名`,COUNT(*) '人数' FROM `点数` GROUP BY `チーム名` HAVING COUNT(*) = 4;

SQL文解説:havingとCount

SELECT文で表示するカラムで「チーム名」と集約関数COUNTを指定し、わかりやすいようにカラム名を「人数」にします。

FROMでテーブル名を指定します。

GROUP BY句でグルーピングするカラム「チーム名」を指定します。

Having句で人数の合計が4を指定します。

ここでHaving句を使用する時の注意点を思い出してください。

GROUP BY句の後ろに記述しています。またHaving句で集約関数を使用しているので注意点はクリアしている事が分かると思います。

SQL文実施:havingとCount

実行結果は以下となります。

SQLにてHaving句でCountの結果を表示
SQLにてHaving句でCountの結果

チームの合計人数が4のチームが表示されています!

SQLでhavingとSumを使ってみる

traning

今度はチームごとの合計値が1500以上のチーム名と合計値を表示してみます。

下のSQL文を実行してみます。

SELECT `チーム名`,SUM(`点数`) FROM `点数` GROUP BY `チーム名` HAVING SUM(`点数`) > 1500;

    SQL文解説:havingとSum

    SELECT文で表示するカラムでチーム名と集約関数SUMを指定します。

    FROMでテーブル名を指定します。

    GROUP BY句でグルーピングするカラム「チーム名」を指定します。

    Having句で条件の点数の合計が1500以上を指定します。

    ここでHaving句を使用する時の注意点を思い出してください。

    GROUP BY句の後ろに記述しています。またHaving句で集約関数を使用しているので注意点はクリアしている事が分かると思います。

    SQL文実施:havingとSum

    では上記のSQL文を実行してみます。

    SQLにてHaving句でSUMの結果を表示
    SQLにてHaving句でSUMの結果

    チーム名でグルーピングしてその合計値が表示されて1500以上のものが表示されています。

    SQLでhavingを使用してエラーが出る場合

    エラー発生

    では以下のSQL構文を実行してみます。

    SELECT `チーム名`,SUM(`点数`) FROM `点数` GROUP BY `チーム名` HAVING `点数` > 250;

    Having句で「点数」カラムを条件にしていますが、GROUP BY句で使用されていないのでエラーが出てしまいます。

    #1054 - 列 '点数' は 'having clause' にはありません。

    Having句で使用する時の注意点に気を付けながら使用してください。

    SQLでhavingの使い方を学ぶ。countなどを使用するのまとめ

    SQLでhavingの使い方を学ぶ。countなどを使用するのまとめ

    SQLでHaving句の基本構文は以下となります。

    SELECT 集約関数 FROM テーブル名 GROUP BY カラム名 HAVING 集約関数;

    SQLでHaving句を使う時の注意点は以下となります。

    HAVING句を使用する時の注意点
    • 位置はGROUP BY句の後
    • Having句で使用できるものに制限あり

    Having句で使用できるものは以下となります。

    Having関数で使用できる要素
    • 定数
    • 集約関数
    • GROUP BY句で指定したカラム

    レコード単体に条件を付けたい場合はWHEREですが集約したものは指定できません。集約関数やグルーピングしたものに条件を付けたいときは、Having句を使用して見て下さい。

    user

    この記事が気に入ったら
    フォローしてね!

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次