人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQL グループの平均と順位の算出方法を教えてください。

以下の様なデータベース(MYSQL)の構造になっている時に、各社の平均収入(income)のランク付けができるSQLを教えてください。

+---------+----------------+
| name | income |
+---------+----------------+
| C社 | 100|
| C社 | 30|
| C社 | 50|
| B社 | 70|
| A社 | 60|
| A社 | 50|
+---------+----------------+


結果

name income rank
A社 55 3位
B社 70 1位
C社 60 2位

また、A社とB社が同収入など、順位にタイが出た場合にも対応できるような方法を求めています。
SQLだけでなく、プログラム側(php)での操作を前提にしたものでも問題ありません。
よろしくお願いいたします。

●質問者: jamis
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● arayayamakun
●200ポイント ベストアンサー

PHP側での処理でも構わないなら、それこそjamisさんの過去の質問にある方法を使用すれば、わかりやすくできますよ。

まずは
SELECT * FROM tbl GROUP BY name


でグループ分けしておいて。
後は
http://q.hatena.ne.jp/1391162718
のいずれかの方法を使えば、思い通りの結果になるはずです。


SQLでまとめることもできるけど、少々ややこしいので私ならPHP側での処理を勧めますね。
グループでまとめて、PHPで順位付けすれば良いだけなので、そちらのほうが楽だと思います。

そんなに速度が変わらないなら、見やすくしておかないと、後で変更があったときなんかに困るんですよね。

そのレコード数が100万とかならPHPの方が遅くなると思うので、データベース側での処理が良いと思いますけど。


jamisさんのコメント
回答ありがとうございます。 グループ分けしてから、PHPで試してみたら、えらく簡単にできました。 データ量も多くないので、実行速度も全く問題なかったです。 まだまだ勉強が必要ですね。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ