mysql メモ 並び替え、件数の制限
order by
limit を使う。
並び替えと件数の指定。
score順に並べる。
mysql> select * from users order by score;
これで小さい順に並べられる。
大き順に並べたいときはdescをつけてあげる。
mysql> select * from users order by score desc;
数字だけでなく文字列にも使うことができる。
名前をアルファベットの逆順に並べたい場合は
select * from users order by name desc;
とうってあげる。
それから並べ替えでなく件数の指定をしたい場合は
limit をつかう。
select * from users limit 3;
とうってあげると3つだけ拾ってきてくれる。
オフセット→開始位置を指定してくれる。
開始位置は0からははじまる。
select * from users limit 2, 2;
これは2から始まる2
つまり0から考えると1から始まって、1と2を拾ってきてくれます。
また他の条件句とも組み合わせ可能で、
order by score desc limit 3;
とすると、ハイスコアユーザーのうち上位3位を引っ張ってきてくれます。
mysql メモ データの集計
- count
- distinct
- sum/max/avg
- group by
- rand
をつかう。
いままでレコードの抽出をしてきたが、それだけではなく、集計をしていく。
総件数を調べたい場合
countを使う。
countはレコードの件数を調べなさいという指定・
このように使う。
select count(*) from users;
その他にteam にはどういった値が入っているのか。ユニークな値だけ引っ張ってきてほしいときはdistinctです。
select distinct team from users;
このようにユニークな値だけ取ってきてくれます。
数値に関しては最大値をとったりもできます。
select max(score) from users
このmax部分に以下を入れていきます。
最大値はmax
最小値はmin
平均はavg
合計はsum
select avg(score) from users group by team;
こうするとチームで平均を出してくれます。
乱数も表示させることができます。
select rand();です。
こうすると0以上1未満の数値をランダムに出してくれる。
これをうまく使うと
select * from users order by rand() limit 1;
ランダムで一人だけ抽選で選ぶということも可能です。
数値はいろいろあるので、公式リファレンスまで・・・
補足情報。
GROUP BYではソートが自動的におこなわれる
GROUP BY を使うと自動的にそのカラムでソートされます。
例えば以下のように team に GROUP BY を使うと自動的に team の昇順でソートされます。
しかし、最後に「ORDER BY NULL」をつけると、ソートは発生しません。
例えば以下のように team に GROUP BY を使うと自動的に team の昇順でソートされます。
SELECT * FROM users GROUP BY team;
しかし、最後に「ORDER BY NULL」をつけると、ソートは発生しません。
SELECT * FROM users GROUP BY team ORDER BY NULL;
データ量が多くてソートが発生すると速度が遅くなる場合に有効な方法のひとつとして、覚えておくと便利です。