• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

mysql中实现排名,求解,看不懂

select sc.*, (  select count(1) from Score where cid = sc.cid and score > sc.score) + 1 as px from Score as sc order by sc.cid, px;求解,这段代码中是怎么实现的排序功能,子查询看不懂,能否详细解析下,谢谢啊

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

selectsc.*,(--子查询的意思是在score表中找出与当前记录cid相同,但score大于当前记录的score(sc.score)的数目+1。--那样的话:如果是0,则证明该条记录是表示的是该班的第一名,如果是1,在表示该班的第二名,以此类推。selectcount(*)fromScoreasawherea.cid=sc.cidanda.score>sc.score--所以后面加了个1)+1aspxfromScoreasscorderbysc.cid,px;做了个测试:
SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforscore------------------------------DROPTABLEIFEXISTS`score`;CREATETABLE`score`(`id`int(11)NOTNULLAUTO_INCREMENT,`cid`int(11)DEFAULTNULL,`score`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8;--------------------------------Recordsofscore------------------------------INSERTINTO`score`VALUES('1','1','80');INSERTINTO`score`VALUES('2','1','70');INSERTINTO`score`VALUES('3','1','90');INSERTINTO`score`VALUES('4','2','80');INSERTINTO`score`VALUES('5','3','70');INSERTINTO`score`VALUES('6','3','60');INSERTINTO`score`VALUES('7','2','50');运行上面的sql查询,结果是:

mysql>selectsc.*,(->selectcount(*)fromScorewherecid=sc.cidandscore>sc.score->)+1aspx->fromScoreasscorderbysc.cid,px;+----+------+-------+------+|id|cid|score|px|+----+------+-------+------+|3|1|90|1||1|1|80|2||2|1|70|3||4|2|80|1||7|2|50|2||5|3|70|1||6|3|60|2|+----+------+-------+------+7rowsinset(0.00sec)

使用道具 举报

发新帖

发布任务需求已有1031166位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!