同順位を考慮したランクの取得について(1~55位まで)
下記の2つのテーブルがあります。
rankingscoreinfo
フィールド名 型 長さ
missionid integer 4 NOT NULL
name varchar 20 NOT NULL
skill integer 4 NOT NULL
score integer 4 NOT NULL
rankinginfo
フィールド名 型 長さ NOT NULL
missionid integer 4 NOT NULL
name varchar 20 NOT NULL
kind integer 4 NOT NULL
missionidとname2つのテーブルの共通フィールドです。
この二つを組み合わせて同順位を考慮したスコアランキングを作成したいです。
1位のscoreが3人同点の場合、3人のスコアランキングは1位で次の人は4位になるようにしたいです。
SQLを組んだのですがレコード数が増えるにつれてどんどんSQLが返ってくる速度が遅くなって困っています。
この二つのテーブルの最速のSQLを組みたいのですがどなたか教えて下さい。
とりあえずINDEXは考慮なしでお願いします。
参考までに私が組んだSQLは下記のものになります。
SELECT
d.name
FROM
(SELECT
*,
(SELECT
COUNT(a.score)+1
FROM
rankingscoreinfo AS a ,
rankinginfo as b
WHERE
a.missionid=10
AND a.skill= 2
AND b.kind = 2
AND a.missionid = b.missionid
AND a.name = b.name
AND a.score > c.score
) AS score_rank
FROM
rankingscoreinfo AS c
WHERE
c.missionid = 10
AND c.score
AND c.skill=2
) AS d ,
rankinginfo as e
WHERE
e.missionid = 10
AND e.kind = 2
AND d.skill = 2
AND d.missionid = e.missionid
AND d.name = e.name
AND d.score_rank >=1 AND d.score_rank <= 55
ORDER BY
score_rank
No.1ベストアンサー
- 回答日時:
2つのテーブルの相関関係がいまいちわからない
なぜ2つに分けているか?
それぞれがどういうデータをもっていて
どう表示したいのか簡単な例示はできますか?
この回答への補足
簡易ゲームの作成をやっています。
missionidはミッションの種類で20のミッションのデータをもっています
nameはプレイヤーの名前のデータを持っています。
二つのテーブルの共通のデータです。
rankingscoreinfoの
skillは技スキル10種類のデータを持っています。
scoreは攻撃したときのダメージの総スコアです。
rankinginfoの
kindはプレイヤーの初心者・中級・上級にわけるように作られた3つのデータを持っています。
あるmissionid(ミッション)から特定のskill(技スキル)でscore(ダメージの総スコア)が高いname(プレイヤー)のランキングをkind(初級・中級・上級)にわけてだしたいです。
元々rankingscoreinfoはscoreの集計だけをやっていて、rankinginfoは初級とかの振り分けで使っていたテーブルなのですがscoreとkindを考慮したランキングを作ろうということで二つのテーブルを利用してランキングを作ることになりました。
表示としては
rank name score
-----------------------
1 hitomi 10
1 numata 10
3 rika 9
4 mika 7
5 sari 6
5 siho 6
5 miho 6
8 machi 3
という風に表示させたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- 英語 The Twilight Zone1959に関するCBSの回答について 1 2023/03/02 15:13
- 英語 この英語の一部おかしくありませんか? 3 2023/01/09 10:43
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「A,B組の女子の氏名のよみ。 1 2023/05/16 15:28
- 英語 この英文は格調高いのでしょうか? 3 2022/06/03 18:55
- 英語 英文の添削をお願いします 4 2023/05/23 11:10
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
カウント結果を1レコードの中...
-
名寄せして件数を取得する事は...
-
MySQLで MAX()とGROUP BYを使う...
-
mysqlのデータベースの重複デー...
-
SQLの集計で「全て」の合計も表...
-
GROUP BYを行った後に結合した...
-
ファイル書込みで一行もしくは...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
select句副問い合わせ 値の個...
-
ADO VBA 実行時エラー3021
-
SELECTで1件のみ取得するには?
-
アクセスでレポートの1印刷内...
-
select insertで複数テーブルか...
-
JSPのNULLレコード表示について...
-
Excel VBA読み込みで文字化けが
-
ACCESS VBA レコードセットの参...
-
Excel VBAで、Averageの範囲を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
使うべきでない文字。
-
SQLの集計で「全て」の合計も表...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
割合(パーセント)を求めるに...
-
チェックボックスの項目をDBにi...
-
月別、販売員別の集計がわかり...
-
MySQL のデータからドロップダ...
-
【初歩】ラジオボタンをつかっ...
-
カウント結果を1レコードの中...
-
何にかが違うから エラーなんで...
-
SQLiteのLike句で抽出できない
-
今週の日曜日から土曜日までの...
-
replaceを使って更に重複レコー...
-
複数の表の条件でのDELETE文
-
SQLサーバーは[main]![No]とい...
-
名寄せして件数を取得する事は...
-
LIKE述語/SQLとPHPを使った検...
おすすめ情報