日々積み重ねろ。

何も積み重ねて来なかった私が何かを積みかねて行くブログ。主にIT系の技術・知識を書いて行きます。

【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句で条件を指定した場合は、ソートが完了してグループ化された後で行が絞り込まれる。