\ プログラミング学習奮闘記録 /

Progate学習メモ SQL②【実践】

目次

検索結果を加工する

重複したデータを省く DISTINCT

DISTINCTを用いると、検索結果から重複するデータを除くことができる

【書き方】

SELECT DISTINCT (name)

FROM purchases;

  • DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除ける。
  • カラム名はカッコ( )で囲む必要があるので注意
  • 上記の場合、購入品テーブルで、nameカラムの重複したデータを省いて取得する

取得したデータに割り算・掛け算する(四則演算)

四則演算「足す(+)、引く(-)、かける(*)、割る(/)」が可能。

【書き方例】

SELECT name, price * 1.08

FROM purchases;

  • 上記で表示されるのはnameカラムと、税込み値段のpriceカラム

集計関数を使う

合計を求める SUM関数

【書き方例】

SELECT SUM(price)

FROM purchases;

  • 上記では、購入品テーブルのpriceカラムの合計を算出できる

WHEREとSUM関数

SUM関数はWHEREと併用できる

【書き方例】

SELECT SUM(price)

FROM purchases

WHERE character_name = “アシタカ”;

  • 上記では、アシタカの購入品の合計金額を算出できる

平均を計算する AVG関数

数値の平均を計算する場合は、AVG使う

【書き方】

SELECT AVG(price)

FROM purchases;

  • こちらもWHEREと併用できる

保存されているデータ数を集計する COUNT関数

COUNT関数は、指定したカラムのデータの合計数を計算してくれる関数。

【書き方①】

SELECT COUNT(price)

FROM purchases;

  • COUNT( カラム名 )」とすることで、指定したカラムのデータの数を計算する。
  • nullになっているデータの数は計算されない

【書き方②】

SELECT COUNT(*)

FROM purchases;

  • nullの数も含めてデータの数を計算したい場合は、COUNT関数で * (全てのカラム)を指定する

【書き方③】

SELECT COUNT(*)

FROM purchases;

WHERE charatcer_name = “アシタカ”;

  • WHEREと併用すると、上記のように、アシタカがいくつ買ったかを集計できる

最大と最小を求める MAX・MIN関数

MAX・MINという関数を用いると、指定したカラムのデータの中からそれぞれ最大・最小のデータを取得することができる。

【書き方①】

SELECT MAX(price)

FROM purchases;

  • MAX,MINも他の集計関数と同様にSELECTで取得したカラムに使用できる
  • 上記の場合は、priceカラムを指定することでもっとも値段が高かった商品のデータを取得できる。

【書き方②】

SELECT MAX(price)

FROM purchases

WHERE character_name = “アシタカ”;

  • WHEREと併用できる
  • 上記では、「アシタカの購入品の中で最も高額な値段」を算出できる

データをグループ化する GROUP BY

GROUP BYを用いると、データをグループ化することができる。

【書き方例】

SELECT
(price)

FROM purchases

GROUP BY purchased_at;

  • GROUP BY カラム名」とすることで、指定したカラム(縦)で、完全に同一のデータを持つレコード(横列)どうしが同じグループとなる。
  • 今までの集計関数を取得するFROMの後ろに「GROUP BY カラム名」を追加する。
  • 上記の場合、「購入日ごとに購入金額の合計」ができる
  • GROUP BYを用いる場合、SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみ

複数のカラムを使ってグループ化する

【書き方】

SELECT SUM(price), purchased_at, character_name

FROM purchases

GROUP BY purchased_at, character_name;

  • GROUP BYは複数のカラム名を適用させることができ、その場合は、カラム名同士をコンマ(,)で繋げる

細かい条件でグループ化する WHEREとGROUP BY

【書き方】

SELECT 集計関数

FROM テーブル名

WHERE 条件

GROUP BY カラム名,カラム名,・・・;

  • GROUP BYはWHEREとも併用することができ、その場合はWHEREの後に書く。

↓WHEREとGROUP BYと集計関数は以下の順番で実行される

1検索WHERE
2グループ化GROUP BY
3関数SUM、AVG、COUNT、MAX、MIN

【例:日付とキャラクターごとの食費に使ったお金の合計を取得する】

SERECT SUM(price), purchased_at, character

FROM purchases

WHERE category = “食費”

GROUP BY purchased_at, character;

  1. WHEREでカテゴリーが「食費」であるレコードを検索する
  2. 日付とキャラクターでグループ化する
  3. 集計関数で集計する

グループ化したデータをさらに絞り込む HAVING

【書き方】

GROUP BY カラム名

HAVING 条件;

  • 「GROUP BY カラム名 HAVING 条件」のようにすることで、条件を満たすグループを取得できる
  • HAVINGはGROUP BYによってグループ化されたデータを検索対象とする

↓HAVINGとGROUP BYと集計関数は以下の順番で実行される

1検索WHERE
2グループ化GROUP BY
3関数SUM、AVG、COUNT、MAX、MIN
4HAVINGHAVING

【書き方例】

SERECT SUM(price), purchased_at

FROM purchases

GROUP BY purchased_at

HAVING SUM(price) > 1000 ;

  • 上記の場合、「日ごとの購入金額の合計が1000円より大きいもの」となる
  • 注意:HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次