Android 在SQL中排名,顺序不同
我正在构建一个有记分板的应用程序。 关键是记分板应该显示球员在其班级中的排名。但按最近时间的顺序显示 我正试图用数据库selectsql来实现这一点Android 在SQL中排名,顺序不同,android,sql,cursor,Android,Sql,Cursor,我正在构建一个有记分板的应用程序。 关键是记分板应该显示球员在其班级中的排名。但按最近时间的顺序显示 我正试图用数据库selectsql来实现这一点 rank name time class how_recent 1. George 2.00 V1 1 min ago 2. Bill 3.00 V1 2 min ago 1. Christoffer 1.00 V2 3 min ago 3. Heini.
rank name time class how_recent
1. George 2.00 V1 1 min ago
2. Bill 3.00 V1 2 min ago
1. Christoffer 1.00 V2 3 min ago
3. Heini. 3.00 V5 4 min ago
除排名外的所有内容都是从数据库中选择的。
我只为班级选择了排名:
SELECT a1._id,
a1.name,
a1.TIME,
COUNT(a2.TIME) rank
FROM players a1,
players a2
WHERE ( ( a1.TIME >= a2.TIME
AND a1.TIME > 0 )
OR ( a1.TIME > 0
AND a1.TIME = a2.TIME
AND a1.name = a2.name ) )
AND a1.TIME > 0
AND a2.TIME > 0
AND a1.class = v1
AND a2.class = v1
GROUP BY a1.name,
a1.TIME
ORDER BY a1.TIME ASC,
a1.name DESC
这是我在SimpleCorsorAdapter中展示的,我的问题是:
是否可以在SQL SELECT中或在SELECT和simpleCursorAdapter之间完成操作
感谢所有能帮助我的人,我将假设等级是每个类中的等级。时间最短的那个排名最高 假设以下数据:
create table players (time float,
class char(2),
name char(10),
id char(2));
insert into players values (2.0, 'V1', 'George', 1),
(3.0, 'V1', 'Bill', 2),
(1.0, 'V2', 'Chris', 3),
(3.0, 'V5', 'Heini', 4);
然后,以下sql按每个类中的最低时间给出排名:
select a1.id,
a1.name,
a1.time,
a1.class,
(select count(*)
from players a2
where a2.class = a1.class
and a2.time <= a1.time) as rank
from players a1
order by a1.class,
a1.time asc,
rank desc;
通过将第二个联接放置到子查询中,可以计算每一行相对于同一类中其他成员的排名
在您的示例中,我对Heini的排名应该为3感到困惑,因为他是class='V5'的唯一成员,所以我假设这是一个拼写错误,应该是1
这就是你想要的结果吗
-编辑
如果您希望两个第一个并列的人为1,然后下一个并列的人为3,请将此更改为:
select a1.id,
a1.name,
a1.time,
a1.class,
(select count(*) + 1
from players a2
where a2.class = a1.class
and a2.time < a1.time) as rank
from players a1
order by a1.class,
a1.time asc,
rank desc;
时间比较现在是一个很好的工具,它可以很好地显示表格。一个问题。如果两个人都有最好的时间,他们都得到排名2。名单上的下一个人排名第三。我希望他们都能排在第一位。下一个排名第三的人。有什么想法吗?请看上面的调整。这只是对count*&where子句的一点修改。太好了!很好用!谢谢
select a1.id,
a1.name,
a1.time,
a1.class,
(select count(*) + 1
from players a2
where a2.class = a1.class
and a2.time < a1.time) as rank
from players a1
order by a1.class,
a1.time asc,
rank desc;