- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用以下 SQL 在我的排行榜表中按排名排序分数:
SELECT score, 1+(SELECT COUNT(*) FROM leaderboard a WHERE a.score > b.score) AS rank
FROM leaderboard b
WHERE stage=1
GROUP BY id
我的表架构是这样的:
CREATE TABLE `leaderboard` (
`auto_id` int(11) NOT NULL AUTO_INCREMENT,
`score` int(11) NOT NULL DEFAULT '0',
`id` int(11) NOT NULL,
`created_on` datetime NOT NULL,
PRIMARY KEY (`auto_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一些示例数据行如下:
auto_id score id created_on
====================================================
1, 72023456, 1, '2014-12-30 11:49:59'
2, 1420234, 1, '2014-12-30 12:00:21'
3, 420234, 1, '2014-12-30 12:00:38'
4, 16382, 1, '2014-12-30 16:31:12'
5, 16382, 1, '2014-12-30 16:34:18'
6, 16382, 1, '2014-12-30 16:37:43'
7, 17713, 1, '2014-12-30 16:38:35'
8, 17257, 1, '2014-12-30 18:53:45'
9, 10625, 1, '2014-12-30 18:58:10'
10, 17272, 1, '2014-12-30 18:58:59'
11, 17328, 1, '2014-12-30 18:59:44'
12, 17267, 37, '2015-01-02 17:11:59'
13, 16267, 37, '2015-01-02 17:12:30'
14, 16267, 37, '2015-01-02 17:13:02'
15, 35509, 37, '2015-01-02 17:17:46'
16, 18286, 37, '2015-01-02 18:20:09'
17, 16279, 37, '2015-01-02 18:20:43'
18, 16264, 37, '2015-01-02 18:21:15'
19, 16265, 37, '2015-01-02 18:40:04'
因为 id
是玩家的 ID,我必须 GROUP BY id
。结果如下:
id score rank
=========================
1 72023456 1
37 17267 11
如何获得如下预期结果?
id score rank
=========================
1 72023456 1
37 35509 2
目前的问题是,现有结果不是玩家的MAX分数。
奖励:我的最终目标是让条目比特定 id
高 1 级和低 1 级。
最佳答案
由于 MySql 没有窗口函数
,您需要的查询必须模仿其行为,因此您必须使用变量。
select id, score, @rank :=@rank+1 as rank
from (
SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc
) tab
,(select @rank := 0) r
编辑:我犯了一个小错误。我现在已经更正了。
输出将是:
id score rank
=========================
1 72023456 1
37 35509 2
基本上我正在做的是在查询上创建一个迭代器,它会为每一行递增变量。当我添加顺序时,它将根据该顺序对您的值进行排名。但是该排名必须在查询之外发生,因为如果有两个以上的 ID,则与排名一起的顺序会把事情搞砸
我将使用“1 rank higher & 1 rank lower than specific id.”的解决方案编辑查询。
编辑:为了奖金(虽然不漂亮)
select id, score, rank
from (
select tab.id, tab.score, @rank :=@rank+1 as rank
from (select @rank := 0) r,
(SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc) tab
) spec
where spec.id=2
UNION
select id, score, rank
from (
select tab.id, tab.score, @rank :=@rank+1 as rank
from (select @rank := 0) r,
(SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc) tab
) spec
where spec.rank=
(select rank-1
from (
select tab.id, tab.score, @rank :=@rank+1 as rank
from (select @rank := 0) r,
(SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc) tab
) spec
where spec.id=2)
UNION
select id, score, rank
from (
select tab.id, tab.score, @rank :=@rank+1 as rank
from (select @rank := 0) r,
(SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc) tab
) spec
where spec.rank=
(select rank+1
from (
select tab.id, tab.score, @rank :=@rank+1 as rank
from (select @rank := 0) r,
(SELECT b.id, max(b.score) as score
FROM leaderboard b
GROUP BY id
order by score desc) tab
) spec
where spec.id=2)
order by rank;
请注意,您将特定 ID 放在子句 spec.id=2
上(我放了 2 是因为我必须更改环境中的值才能对其进行测试)
这是我测试的 SQL Fiddle,两个查询都有效:http://sqlfiddle.com/#!2/75047/2
关于mysql - 在 MySQL 中排序排行榜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27935354/
我的数据库中有 2 个表,如下所示: 下面是团队表: id tname poule 1 ZF Eger heren1A 2 Pro Recco he
这期看标题已经能猜到了,主要讲的是成绩排行功能,还有对应的文件读写。那么废话不多说,让我们有请今天的主角...的设计稿: 那么主角是何方神圣呢?当然是图中的大框框—
我正在尝试在我的应用程序中实现 GameCenter。这是为了向我显示 GameCenter LeaderBoard,但它向我显示:没有项目。 -(IBAction) ShowLeader{ GKGa
这个问题在这里已经有了答案: MySQL - Get row number on select (6 个答案) 关闭 9 年前。 我有一个包含以下数据的表 USER_ID | REVENUE 1
我有一个排行榜,我想给每一行一个排名,代表他们有多少分。这是我到目前为止的代码。它工作正常,但是当两个玩家拥有相同数量的点数时,排名相同,例如,如果 DB 中有 2/2 的玩家都拥有 100 点,则他
我正在为即将到来的世界杯做一个小项目。我正在建立一个基于国家队小组的名册/排行榜/记分牌。我们的想法是获得有关小组内或淘汰赛阶段所有即将到来的比赛的信息(比分、比赛时间、比赛统计数据等)。目前我被数据
如何设置工具提示显示在所有元素之上?我需要分配坐标,以便工具提示不会关闭图表,但顶部 block 会关闭工具提示。 http://joxi.ru/L21PnlgTRPVxEm http://joxi.
我用 C# 创建了一个简单的排行榜应用程序。但是我注意到拉动和排序分数的问题。假设我在一个排序集 (95、12、60、50、66) 上运行 ZREVRANGE,然后它将按 95、66、60、50、12
我已经为我的应用设置了 google play 游戏服务并添加了排行榜。我在代码中添加了游戏 ID 和排行榜 ID。现在应用程序和游戏都已发布。 用于启动排行榜的代码 if(mclient.isCo
我目前有一些代码可以检测您在特定秒数内可以点击多少次 react 。 我正在尝试为每个人制作一个排行榜,以最高 CPS(每秒点击次数)保存前 10 名。否则代码工作完美,但我被困在排行榜上。 这是我的
当前是否有办法从网络读取 GameCenter 排行榜数据? 我正在寻找一种只读方式来在配套网站上显示排行榜。我不需要发布分数或以其他方式操作设备上的排行榜。 我感觉答案是否定的,我需要使用 Open
我正在尝试使用该按钮来拉出单个 View Gamecenter 排行榜,但无法真正弄清楚如何。我尝试了苹果论坛,但没有帮助,所以我来到了这里。帮助表示赞赏 最佳答案 将呈现 GKGameCenterV
我有一个包含以下列的表格: +----+--------+-----+------+-------+-------+-------+ | Id | Member | End | Done | Righ
我正在尝试用 MySQL 数据制作一个排行榜。 MySQL数据来自minecraft服务器上的插件。因此,我将插件的数据链接到名为 iConomy 的 MySQL 数据库 在数据库中我制作了 2 个
我有一些代码,可以计算用户在排行榜上的分数和位置,然后根据他们的分数/分数按降序显示它们。 现在我已经完成了编号,所以它看起来像这样 1 2 2 3 3 3 4 但是我想让这个更正确并根据之前的数字跳
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我对 Couchbase 数据库非常陌生,并且需要在我们的项目中构建排行榜解决方案。理想情况下,它应该像内存排序集一样工作:添加的每个项目为 O(log(N)),O(log(N)+M),其中 N 是排
我目前正在开发这个应用程序,用于跟踪每日运行并显示排行榜。这是针对一个类的,所以我不一定要寻找代码,只是关于如何进行的一些想法。无论如何,应用程序当前将获取输入信息(从底部文本字段),创建 RaceE
现在我以这种方式显示 SwarmConnect 在线排行榜: public void showLeaderboard() { SwarmLeaderboard.showLeaderboard(
是否可以轻松实现并使用 Javascript 完成,我不确定但是.. 如下面的代码所示,我有 5 个玩家,每个玩家的分数都不同。我正在寻找代码,以便它会根据玩家的分数自动重新列出玩家。理想情况下,如果
我是一名优秀的程序员,十分优秀!