SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问! 15
现在表里的大概的情况是这样的:idnamescoredateround1abc1002012-11-1212abc1052012-11-1313abc1082012-11...
现在表里的大概的情况是这样的:
id name score date round
1 abc 100 2012-11-12 1
2 abc 105 2012-11-13 1
3 abc 108 2012-11-14 1
4 opq 159 2012-11-13 1
5 opq 180 2012-11-14 1
6 opq 182 2012-11-15 1
7 abc 132 2012-11-15 1
8 bbb 201 2012-11-11 2
9 eee 199 2012-11-11 1
10 eee 200 2012-11-14 1
也就是说,表中有多人、多天、多轮(round)的分数,现在要查询特定的一轮的最高分人名排名,比如我就想知道第一轮(round = 1) 的排名,也就是想要查询前三名:
eee 200
opq 182
abc 132
(也就是每个人只保留最高结果,像是 eee 的199分,虽然排名第二,但是不被查询出来,因为eee有200分,更高)
请问怎么写?谢谢!!! 展开
id name score date round
1 abc 100 2012-11-12 1
2 abc 105 2012-11-13 1
3 abc 108 2012-11-14 1
4 opq 159 2012-11-13 1
5 opq 180 2012-11-14 1
6 opq 182 2012-11-15 1
7 abc 132 2012-11-15 1
8 bbb 201 2012-11-11 2
9 eee 199 2012-11-11 1
10 eee 200 2012-11-14 1
也就是说,表中有多人、多天、多轮(round)的分数,现在要查询特定的一轮的最高分人名排名,比如我就想知道第一轮(round = 1) 的排名,也就是想要查询前三名:
eee 200
opq 182
abc 132
(也就是每个人只保留最高结果,像是 eee 的199分,虽然排名第二,但是不被查询出来,因为eee有200分,更高)
请问怎么写?谢谢!!! 展开
4个回答
展开全部
直接使用一条查询语句就能解决了。
select * from 你的表名 order by score desc limit 3
如果只要查name score的话。则是:
select name,score from 你的表名 order by score desc limit 3
说明:order by score desc -----按score降序排序
limit 3取3条数据。
select * from 你的表名 order by score desc limit 3
如果只要查name score的话。则是:
select name,score from 你的表名 order by score desc limit 3
说明:order by score desc -----按score降序排序
limit 3取3条数据。
追问
这样首先没有区分 round,就是没有确定是哪一轮。
第二个问题更关键,就是可能出现
eee 200
eee 199
opq 182
的情况,我不想让 eee 出现两次,只要一次。
追答
只要出现一次的话可以使用这样写:
select *,count(distinct name),max(score) from 表名 group by name order by max(score) desc limit 3
其中你的值是最后一项max(score)
distinct就是去除重复的。
展开全部
select name,score,round from (select * from sqlTest order by score desc) as tab group by name having round= 1 order by score desc,name;
+------+-------+-------+
| name | score | round |
+------+-------+-------+
| eee | 200 | 1 |
| opq | 182 | 1 |
| abc | 132 | 1 |
+------+-------+-------+
是这个效果不?
+------+-------+-------+
| name | score | round |
+------+-------+-------+
| eee | 200 | 1 |
| opq | 182 | 1 |
| abc | 132 | 1 |
+------+-------+-------+
是这个效果不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个好写
用分组
按name来分组
取最多的score
取出前三条
用分组
按name来分组
取最多的score
取出前三条
追问
啊谢谢,能具体讲讲吗?我是新手啊!如果能具体讲讲绝对把悬赏分给你啦!
追答
你看我在乎你那点悬赏吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from table-name where round = 1 group by name order by score desc limit 3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询