ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2015年5月31日日曜日

SELECT文による順位付け


# テスト用のテーブル作成
CREATE TABLE `ranking` (
  `user_id` int(11) NOT NULL DEFAULT '0',
  `score`   int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# テスト用のデータ作成
INSERT INTO
  ranking(user_id, score)
VALUES
  (1,1213),
  (2,10233),
  (3,143023),
  (4,12013),
  (5,12510013),
  (6,12003),
  (7,120163),
  (8,103123),
  (9,103123);


# 順位付けのSELECT文
# サブクエリで、メインクエリのscore値より大きいレコード数+1 をランクとして抽出しています。
SELECT
  user_id,
  score,
  (SELECT COUNT(*) +1 FROM ranking SUB WHERE MAIN.score < SUB.score) AS rank
FROM
  ranking MAIN
ORDER BY
  rank, user_id
;



# 出力結果
+---------+----------+------+
| user_id | score    | rank |
+---------+----------+------+
|       5 | 12510013 |    1 |
|       3 |   143023 |    2 |
|       7 |   120163 |    3 |
|       8 |   103123 |    4 |
|       9 |   103123 |    4 |
|       4 |    12013 |    6 |
|       6 |    12003 |    7 |
|       2 |    10233 |    8 |
|       1 |     1213 |    9 |
+---------+----------+------+

MacのMySQLが起動しないので、MariaDBに入れ替えと、パーミッション設定しなおした。


# mariaDBインストール
brew uninstall mysql
brew intall mariadb

# エラーが出て起動できない場合
# (MariaDBにしなくてもこの権限設定だけすれば解消したっぽい)
MYSQL_DIR=/usr/local/var/mysql
sudo chown -hR `whoami`:admin $MYSQL_DIR
sudo chmod -R 771 $MYSQL_DIR

# 起動
mysql.server start

# ログイン
mysql -u root



下記エラー内容


$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/Retina-MacBookPro.local.pid).

$ mysql.server stop
ERROR! MySQL server PID file could not be found!