以下の様なデータベース(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位
一例
--サンプルデータの準備 CREATE TEMPORARY TABLE `テーブル名`(name text, income int); INSERT INTO `テーブル名` VALUES ('C社',100),('C社',30),('C社',50),('B社',70),('A社',60),('A社',50); --求めるクエリ SET @n:=0; SELECT *, @n:= @n + 1 AS rank FROM ( SELECT name , avg(income) AS income FROM `テーブル名` GROUP BY name ORDER BY income DESC ) AS t ;
結果
name | income | rank |
---|---|---|
B社 | 70.0000 | 1 |
C社 | 60.0000 | 2 |
A社 | 55.0000 | 3 |
ソート順変更バージョン
SET @n:=0; SELECT * FROM ( SELECT *, @n:= @n + 1 AS rank FROM ( SELECT name , avg(income) AS income FROM `テーブル名` GROUP BY name ORDER BY income DESC ) AS t ) AS tt ORDER BY name ;
結果
name | income | rank |
---|---|---|
A社 | 55.0000 | 3 |
B社 | 70.0000 | 1 |
C社 | 60.0000 | 2 |
質問文に無い条件の後付けを認めるときりがないので、追加のコードは書きません。
2014/02/01 08:08:12誰かが通りがかるのを待つか、キャンセルしてくださいな。
質問をやりなおすなら「問題が出ますね」などとあいまいで嫌味たらしい返信をしたりせず、
自分が求めるものを最初からしっかりと書くと良いでしょう。
ついでに、
回答拒否リストに id:windofjuly を入れといてもらえると助かります。
では、さようなら。
嫌な思いをさせたのなら、申し訳ないです。
2014/02/01 08:28:34追加のコードを求めたり、嫌みを言うつもりなどはなかったのですが。