ProgateでSQLを学ぶ【コース2は関数、グループ化】

ProgateでSQLを学ぶコース2


この記事ではProgateのSQLコース2の内容をまとめています前回学んだ内容は以下の記事にまとめています。
ProgateでSQLを学ぶコース1は【SQLの基本的な命令文】 | 初心者のプログラミング

前回の内容はSQLの基本的な命令文であるSELECT, FROM, WHERE, ORDER BYなどでした。今回のSQLコース2の内容は実用的なSQLの命令文を学んでいきます。

DISTINCTでデータの重複をとりのぞく

SQLのDISTINCT文はデータの重複をとりのぞくことができます。もっと詳しくいうと指定したカラムの重複したデータを取り除くのでSELECT文と一緒に書くかきます。

【 SELECT DISTINCT(カラム名) 】というふうに書くことによってカラムの重複したレコードが取り除かれた状態になるようです。

SELECT DISTINCT(name)
FROM purchases;

SQLの四則演算

SQLのSELECT文で四則演算を行うことができます。

【 SELECT カラム名 * 1.08 】のように書くと消費税込みの値段が出力できますね。

以下は四則演算したカラムのデータと四則演算してないカラムをとりだしたものです

SELECT name, price, price * 1.08 
FROM purchases;

関数

SQLにはあらかじめ便利な関数が定義されているようです。以下はカラムの合計を出力するSUM()関数を使用した例です。

SELECT SUM(price)
FROM purchases
WHERE character_name = "にんじゃわんこ"
;

関数はこの他にもいろいろあって平均値や最大値や最小値を求めることができる関数があります。

  • SUM() → 合計値を算出する
  • AVG() → 平均値を算出する
  • COUNT() → カラムのレコードの数を算出する *ワイルドカードで全レコード数を算出
  • MAX() → 最大値を算出する
  • MIN() → 最小値を算出する
SELECT Count(*)
FROM purchases
WHERE character_name = "にんじゃわんこ";
SELECT name, MAX(price)
FROM purchases
WHERE character_name = "にんじゃわんこ";

GROUP BY でレコードをグループ化する

【 GROUP BY カラム名 】と記述することによって、カラムの中で同じレコードのものがグループ化されます。さらにそこに関数を使うことによって。グループ化したレコードを集計することができるようです。

GROUP BYには注意点があり、GROUP BYで指定したカラム名と集計関数以外はSELECT文で使っていけないきまりがあります。
SQL GROUP BY

SELECT  SUM(price),purchased_at
FROM purchases
GROUP BY purchased_at
;

WHEREとGROUP BYを併用する

WHEREは検索のSQL命令文。GROUP BYはグループ化のためのSQL命令文でした。これらの構文は実行順序が決まっており。GROUP BYはWHEREの下に書かないといけない決まりがるようです。構文の書き順ではありませんが、命令が実行される順番は以下のようになっているようです。

  1. 検索 → WHERE
  2. グループ化 → GROUP BY
  3. 関数
  4. HAVING

以下はWHEREとGROUP BYを併用した書き方です。

SELECT SUM(price), purchased_at
FROM purchases
WHERE character_name = "にんじゃわんこ"
GROUP BY purchased_at 
;

HAVINGを使ってグループ化されたデータを絞り込む

HAVINGはWHEREと同様にデータを絞り込むことができるのですが、WHEREはテーブル全体を絞り込みの対象とするのに対し、HAVINGはグループ化されたデータに対し絞り込みを行います。

したがってHAVINGはGROUP BYのあとに記述します。

SELECT SUM(price), purchased_at
FROM purchases
GROUP BY purchased_at HAVING SUM(price) > 2000
;

Progate SQLコース2まとめ

SQL文は構文自体は少ないのですが、命令の実行順序とかがややこしてく混乱しそうになりますね。ちょっとここでまとめたいと思います。

SQLの命令文がこちら↓
SQLの命令文

SQLの実行順序がこちら↓
SQL関数の実行順序

というかたぶんSQLは慣れの問題なんじゃないかと思います。以上です。