【SQL】MySQLデータの並べ替え、グループ分けコマンドまとめ
■テーブルのデータを降順で表示する
SELECT 表示する列名 FROM テーブル名 ORDER BY キーとなる列名 DESC;
■テーブルのデータを昇順で表示する
SELECT 表示する列名 FROM テーブル名 ORDER BY キーとなる列名 ASC;
■複数の列を基準にして並び替える
SELECT 表示列名 FROM テーブル名 ORDER BY 列名1 ASC又はDESC, 列名2 ASC又はDESC;
※列名1で指定した列を基準に並べ替え。同じ値のデータがあれば列名2で指定した列を基準に並べ替え。
■グループ化する
SELECT category FROM market GROUP BY category;
※テーブルmarketの列categoryをグループ化
■グループ化したものをさらにグループ化
SELECT category, name FROM market GROUP BY category, name;
※列categoryのグループ化し、さらにnameごとにグループ化。categoryごとにnameを表示することができます。
■グループ化して登録件数を調べる
SELECT category, COUNT(category) AS "件数" FROM market GROUP BY category;
※列category別の登録件数が表示
■グループ化したものをさらにグループ化したデータの登録件数を調べる
SELECT category, name, COUNT(*) AS "件数" FROM market GROUP BY category, name;
※COUNT(*)にした場合は、NULLの件数もカウント,COUNT(name)にした場合はNULLの件数はカウントされない。
■グループ化して合計値を表示する
SELECT category, SUM(sales) AS "受注額" FROM market GROUP BY category;
※列categoryごとの列salesの合計値を表示
■グループ化して平均値を表示する
SELECT category, AVG(sales) AS "平均受注額" FROM market GROUP BY category;
※列categoryごとの列salesの平均値を表示
■平均値の小数点以下を四捨五入する(ROUND)
SELECT category, ROUND(AVG(sales)) AS "平均受注額" FROM market GROUP BY category;
※3218.7500 → 3219,3225.0000 → 3225
※ROUN()関数では、第二引数で四捨五入後の桁数を指定できる。ROUND(123.45,1)→123.5 ROUND(123.456,-1) → 120
■グループ化して最大値を表示
SELECT category, name, MAX(sales) AS "最大受注額" FROM market GROUP BY category, name;
■グループ化したデータに条件を付けて抽出する(HAVING)
SELECT name, SUM(sales) AS "受注額" FROM market GROUP BY name HAVING SUM(sales) >= 4000;
■データを抽出してからグループ化
SELECT name, COUNT(*) FROM market WHERE category = '魚介' GROUP BY name;
■グループ化してから並び替え
SELECT name, AVG(sales) FROM market GROUP BY name ORDER BY AVG(sales) DESC;
■HAVINGとWHEREの違い
HAVING句の役割はグループに対する条件を指定する事。
WHERE句の役割は行にたいする条件を指定する事。
WHERE句で条件を指定した場合は、ソートの前に行が絞り込まれる。
HAVING句で条件を指定した場合は、ソートが完了してグループ化された後で行が絞り込まれる。