4th(Rails)DAY8の課題は「Progate SQL コースⅡ」です。
DAY7に引き続きProgateでSQLの学習になります。
目次
検索結果の重複を省く:DISTINCT
SELECTのカラム指定の箇所を「DISTINCT(カラム名)」とすることで指定したカラムの重複したレコードを検索結果から省くことができる。
1 2 |
SELECT DISTINCT(カラム名) FROM テーブル名; |
四則演算
SELECTのカラム指定の箇所で四則演算(+(加算)、-(減算)、*(乗算)、/(除算))を行うことができる。
1 2 3 4 5 |
SELECT カラム名 + 数値, -- 加算 カラム名 - 数値, -- 減算 カラム名 * 数値, -- 乗算 カラム名 / 数値 -- 除算 FROM テーブル名; |
合計を求める:SUM関数
SELECTのカラム指定に「SUM(カラム名)」とすることで、指定したカラム名の合計値を求めることができる。
1 2 3 |
SELECT SUM(カラム名) FROM テーブル名 WHERE カラム名 = 条件 -- SUMはWHEREと併用できる</pre> |
平均を求める:AVG関数
SELECTのカラム指定に「AVG(カラム名)」とすることで、指定したカラム名の平均値を求めることができる。
1 2 3 |
SELECT AVG(カラム名) FROM テーブル名 WHERE カラム名 = 条件 -- AVGはWHEREと併用できる</pre> |
データの個数を求める:COUNT関数
SELECTのカラム指定に「COUNT(カラム名)」とすることで、指定したカラムのデータの個数を求めることができる。
指定したカラムの値がNULLの場合はデータの個数にカウントされない。
値がNULLのレコードも含めてデータの個数を求めたい場合は「COUNT(*)」とするとレコードの行数が求めることができる。
1 2 3 4 5 6 7 8 |
<pre class="lang:mysql decode:true " >SELECT COUNT(カラム名) FROM テーブル名 WHERE カラム名 = 条件 -- COUNTはWHEREと併用できる</pre> -- テーブルの行数を求める場合 SELECT COUNT(*) FROM テーブル名; </pre> |
最大・最小値を求める:MAX・MIN関数
SELECTのカラム指定に「MAX(カラム名)」とすることで指定したカラム名の最大値、「MIN(カラム名)」とすることで最小値を求めることができる。
1 2 3 4 |
-- 最大値 SELECT MAX(カラム名) FROM テーブル名 WHERE カラム名 = 条件 -- MAXはWHEREと併用できる&lt;/pre&gt; |
1 2 3 |
SELECT カラム名, SUM(カラム名) -- SELECTに指定できるのはGROUP BYのカラムと集計関数のみ FROM テーブル名 GROUP BY カラム名 |
— 最小値
SELECT MIN(カラム名)
FROM テーブル名
WHERE カラム名 = 条件 — MINはWHEREと併用できる&lt;/pre&gt;
データをグループ化する:GROUP BY
FROM(WHEREがある場合はWHERE)の後ろに「GROUP BY カラム名」と記述することで、指定したカラムで重複データがグループ化され、集計関数(SUMなど)で集計することができる。
GROUP BYを指定した場合はSELECTに指定できるのはGROUP BYに指定したカラムと集計関数のみとなる。
1 2 3 4 |
SELECT カラム名, SUM(カラム名) -- SELECTに指定できるのはGROUP BYのカラムと集計関数のみ FROM テーブル名 WHERE 条件 GROUP BY カラム名, カラム名, ・・・ |
グループ化したデータを絞り込む:HAVING
GROUP BYでグループした結果からさらに絞り込みを行いたい場合は「HAVING」を使用します。HAVINGでの絞り込みは集計関数の計算後の行われる。
HAVINGの条件に指定するカラムはGROUP BYで指定したカラムを使用する必要がある。
1 2 3 4 5 |
SELECT カラム名, SUM(カラム名) FROM テーブル名 WHERE 条件 GROUP BY カラム名, カラム名, ・・・ HAVING 条件 -- 条件の指定するカラムはGROUP BYで指定したもののみ指定できる |
GROUP BYを指定した場合の処理順は以下のとおり。
- WHEREでの絞り込み
- GROUP BYでのグループ化
- 集計関数の計算
- HAVINGでの絞り込み
まとめ
GROUP BYの処理順は大事なので、しっかりとおさえておく。(処理順が分かっていないと思うようにデータが取得できない)
僕がSQLを初めて行ったときもGROUP BYでひっかかったので初心者の方は要注意だと思います。