发布网友 发布时间:2022-04-06 07:02
共5个回答
懂视网 时间:2022-04-06 11:23
如图:
假设一个user表,此时需要根据number客户数量对用户进行排名。
于是,我们要对user表内的用户进行一个排名:
$sql = "SELECT p.name,p.number, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM ruser ORDER BY number DESC) AS p"
*注:*1、 SELECT @rownum := 0:表示对rownum赋初始值0
2、@rownum := @rownum + 1:表示对rownum加1,语句中会从1开始,每一行往下都自动加1
查询结果如下:
如图所示,上述代码会根据user表中的number从大到小进行排序。
如果需要查询用户小王的排名,就要根据他的openid来查询排名:
$sql = "SELECT b.openid,b.name,b.number,b.rownum FROM(SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r,(SELECT * FROM partneruser ORDER BY `number` DESC) AS t) AS b WHERE b.openid = "o4mxs5Tia6Ieayvxiebx8rTc1zO4" ";
查询结果如下:
热心网友 时间:2022-04-06 08:31
直接使用一条查询语句就能解决了。
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就是去除重复的。
热心网友 时间:2022-04-06 09:49
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 |
+------+-------+-------+
是这个效果不?
热心网友 时间:2022-04-06 11:24
这个好写
用分组
按name来分组
取最多的score
取出前三条追问啊谢谢,能具体讲讲吗?我是新手啊!如果能具体讲讲绝对把悬赏分给你啦!
追答你看我在乎你那点悬赏吗?
热心网友 时间:2022-04-06 13:15
select * from table-name where round = 1 group by name order by score desc limit 3