私は学生のための歴史試験の合計得点を保持するこのようなテーブルがあります。Mysql、割合でユーザーをランキング
+----+---------------+-------+---------+-
| id | name | history | rank |
+----+---------------+-------+---------+-
| 1 | yngiid | 97 | |
| 2 | viyrp | 217 | |
| 3 | pae | 599 | |
| 4 | spohl | 284 | |
| 5 | shl | 295 | |
| 6 | okeer | 73 | |
| 7 | jmaany | 657 | |
| 8 | hxt | 80 | |
| 9 | yanier | 599 | |
+----+---------------+-------+----------+-
あなたが見ることができる履歴フィールドには、学生の合計得点が含まれています。さて、私は学生の得点をランク付けしたいのですが、ポイントが高いほどランクは低くなりますが、パーセンテージを使用するだけです。つまり、ユーザーは1から100までのランク付けが可能で、基本的にはstackoverflowのプロファイルページにあるようになります。top 1%
私はこれを試しました。
SELECT NAME, HISTORY, ROUND(history/100) AS percentage FROM test ORDER BY percentage DESC
私はこれを取得できました。 TOP 1%
または類似した何かを言うように、最低の割合を取得する必要があり、最高HISTORY
ポイントで100%とユーザ - (1)の割合は、1からでなければなりませんので
name HISTORY percentage
------ ------- ------------
jmaany 657 7
yanier 599 6
pae 599 6
shl 295 3
spohl 284 3
viyrp 217 2
yngiid 97 1
yngiid 97 1
okeer 73 1
yngiid 97 1
hxt 80 1
yngiid 97 1
上記は、間違っています。
ここでは、役立つ場合のサンプルテーブルダンプを示します。 stackoverflowのは、それが言うプロフィールページ、上の持っているものと基本的に同様
create table `test` (
`id` int (11),
`name` varchar (765),
`history` int (11),
`rank` int (11)
);
insert into `test` (`id`, `name`, `history`, `rank`) values
('1','yngiid','97',NULL),
('2','viyrp','217',NULL),
('3','pae','599',NULL),
('4','spohl','284',NULL),
('5','shl','295',NULL),
('6','okeer','73',NULL),
('7','jmaany','657',NULL),
('8','hxt','80',NULL),
('9','yanier','599',NULL);
?参考値が必要です。あなたが提供したデータの参照値は2つだけです:すべての履歴ポイントの合計、または他の学生と比較したランキングの位置です。より明示的にする必要があります。あなたが望む最終データを表示 –
また、私はこれの背後に論理が表示されません:ポイントが高いほど、ランク(それは論理的です)、なぜ最もポイントを持つ人々が最も低い割合を持っていますか???参考値が –
@ThomasGであることを明確に説明しない限り、それは意味をなさない。わからない。数学は私のためのパズルですが、あなたは私が必要とするものを理解しています。最高得点者を獲得することはできません。 – ANW