ウィルキンソンの炭酸が抜けていく。

webクリエイターのイロハ

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 の昇順でソートされます。

SELECT * FROM users GROUP BY team;


しかし、最後に「ORDER BY NULL」をつけると、ソートは発生しません。

SELECT * FROM users GROUP BY team ORDER BY NULL;


データ量が多くてソートが発生すると速度が遅くなる場合に有効な方法のひとつとして、覚えておくと便利です。