mysql 单表排序,相同值排序
三种方式:
第一种是比大小,然后计数
select t.score,(
select count(1) from tmptest where score<=t.score
) from tmptest t
第二种是利用笛卡尔积,两对比排序
-- 学校类型数据
SELECT t.examid,'-' AS unitcode,t.schooltype,'-' AS classname,t.bkrs,t.skrs,t.avgs,
SUM(IF(t.avgs<=lt.avgs,lt.avgrank,0))+1-t.avgrank AS avgrank,
t.anum,t.aratio,
SUM(IF(t.aratio<=lt.aratio,lt.arrank,0))+1-t.arrank AS arrank,
t.bnum,t.bratio,
SUM(IF(t.bratio<=lt.bratio,lt.brrank,0))+1-t.brrank AS brrank,
'' AS ordernum
FROM
(
SELECT
schooltypeinfo.examid,schooltypeinfo.objid,schooltypeinfo.testpaperid,schooltypeinfo.wl,schooltypeinfo.subjectid,schooltypeinfo.scoreType,schooltypeinfo.objType,
schooltypeinfo.schooltype,schooltypeinfo.bkrs,schooltypeinfo.skrs,schooltypeinfo.avgs,
schooltypeaa.anum,ROUND(schooltypeaa.anum/schooltypeinfo.skrs,4) aratio
,schooltypebb.bnum,ROUND(schooltypebb.bnum/schooltypeinfo.skrs,4) bratio,
COUNT(1)AS avgrank,COUNT(1) AS arrank,COUNT(1) AS brrank
FROM
(
SELECT
dast.examid,dast.objid,dast.testpaperid,dast.wl,dast.subjectid,dast.scoreType,dast.objType,
dast.schooltype,dast.bkrs,dast.skrs,ROUND(dast.avgs,2) avgs
FROM `dw_agg_schooltype_totalscore` dast
WHERE dast.examid = 2021 AND dast.subjectid = 999 AND dast.`scoreType` = 1
)schooltypeinfo INNER JOIN (
SELECT dass.schooltype,SUM(IF(dass.score >= @ascore,dass.num,0)) anum FROM dw_agg_schooltype_segment dass WHERE dass.examid = 2021 AND dass.objid = 20002 AND dass.subjectid = 999 GROUP BY dass.schooltype -- 学校类型A优人数
)schooltypeaa ON schooltypeinfo.schooltype = schooltypeaa.schooltype
INNER JOIN(
SELECT dass.schooltype,SUM(IF(dass.score >= @bscore,dass.num,0)) bnum FROM dw_agg_schooltype_segment dass WHERE dass.examid = 2021 AND dass.objid = 20002 AND dass.subjectid = 999 GROUP BY dass.schooltype -- 学校类型B优人数
) schooltypebb ON schooltypeinfo.schooltype = schooltypebb.schooltype
GROUP BY schooltype
) t
LEFT JOIN
(
SELECT
schooltypeinfo.examid,schooltypeinfo.objid,schooltypeinfo.testpaperid,schooltypeinfo.wl,schooltypeinfo.subjectid,schooltypeinfo.scoreType,schooltypeinfo.objType,
schooltypeinfo.schooltype,schooltypeinfo.bkrs,schooltypeinfo.skrs,schooltypeinfo.avgs,
schooltypeaa.anum,ROUND(schooltypeaa.anum/schooltypeinfo.skrs,4) aratio
,schooltypebb.bnum,ROUND(schooltypebb.bnum/schooltypeinfo.skrs,4) bratio,
COUNT(1)AS avgrank,COUNT(1) AS arrank,COUNT(1) AS brrank
FROM
(
SELECT
dast.examid,dast.objid,dast.testpaperid,dast.wl,dast.subjectid,dast.scoreType,dast.objType,
dast.schooltype,dast.bkrs,dast.skrs,ROUND(dast.avgs,2) avgs
FROM `dw_agg_schooltype_totalscore` dast
WHERE dast.examid = 2021 AND dast.subjectid = 999 AND dast.`scoreType` = 1
)schooltypeinfo INNER JOIN (
SELECT dass.schooltype,SUM(IF(dass.score >= @ascore,dass.num,0)) anum FROM dw_agg_schooltype_segment dass WHERE dass.examid = 2021 AND dass.objid = 20002 AND dass.subjectid = 999 GROUP BY dass.schooltype -- 学校类型A优人数
)schooltypeaa ON schooltypeinfo.schooltype = schooltypeaa.schooltype
INNER JOIN(
SELECT dass.schooltype,SUM(IF(dass.score >= @bscore,dass.num,0)) bnum FROM dw_agg_schooltype_segment dass WHERE dass.examid = 2021 AND dass.objid = 20002 AND dass.subjectid = 999 GROUP BY dass.schooltype -- 学校类型B优人数
) schooltypebb ON schooltypeinfo.schooltype = schooltypebb.schooltype
GROUP BY schooltype
) lt
ON t.examid=lt.examid
AND t.objid=lt.objid
AND t.testpaperId=lt.testpaperId
AND t.wl=lt.wl
AND t.subjectid=lt.subjectid
GROUP BY t.examid,t.objid,t.testpaperId,t.subjectId,t.avgs,t.schooltype,t.scoreType,t.wl,t.objType
第三种是利用变量对比加1
select a.*,
@rownum:=@rownum+1 AS rownum,
IF(@total=a.score,@rank,@rank:=@rownum) AS rank,
@total:=a.score tscore
from sqooptest a,(SELECT @rank:=1, @rownum:=0) b order by a.score desc
mysql 单表排序,相同值排序的更多相关文章
- Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- python 3 mysql 单表查询
python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...
- Mysql 单表查询where初识
Mysql 单表查询where初识 准备数据 -- 创建测试库 -- drop database if exists student_db; create database student_db ch ...
- MySQL单表多字段模糊查询
今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ...
- MySQL单表最大限制
想把一个项目的数据库导出来,然后倒入到自己熟悉的MySQL数据库中进行运行和调试.导出来后,发现sql文件整整有12G多大,忽然想起来,MySQL好像有个叫做容量限制的神奇特性,但是忘了上限是多少了, ...
- mysql单表大小的限制
mysql单表大小的限制一.MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定(限制扩大到64pb),而是由所在主机的OS上面的文件系统来决定了.在mysql5. ...
- MYSQL单表可以存储多少条数据???
MYSQL单表可以存储多少条数据??? 单表存储四千万条数据,说MySQL不行的自己打脸吧. 多说一句话,对于爬虫来说,任何数据库,仅仅是存储数据的地方,最关心的是 能否存储数据和存储多少数据以及存储 ...
- Mysql 单表查询 子查询 关联查询
数据准备: ## 学院表create table department( d_id int primary key auto_increment, d_name varchar(20) not nul ...
- MySQL单表数据不超过500万:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...
- MySQL单表最大记录数不能超过多少?
MySQL单表最大记录数不能超过多少? 很多人困惑这个问题.其实,MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身. 从性能角度来讲,MySQL单表数据不要 ...
随机推荐
- Thymeleaf 模板的使用
Thymeleaf是现代化服务器端的Java模板引擎,不同与JSP和FreeMarker,Thymeleaf的语法更加接近HTML,并且也有不错的扩展性.详细资料可以浏览官网.本文主要介绍Thymel ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【JVM】JVM系列之Class文件(三)
一.前言 随着我们学习的不断深入,我相信读者对class文件很感兴趣,class文件是用户编写程序与虚拟机之前的桥梁,程序通过编译形成class文件,class文件之后会载入虚拟机,被虚拟机执行,下面 ...
- SQL Server 通过重建方式还原 master 数据库
1,备份master数据库 2,停止服务,直接删除master数据文件 3,用安装程序重建master数据文件 控制台下进入安装目录就不说了 D:\SetUp\sqlserver2012>Set ...
- jquery兼容实验
使用jquery时候,曾经遇到两个问题: 1.一个页面里,使用了很多基于jquery的前端ui库,但是各个库之间对jquery的依赖的版本不一样,有的依赖jquery1.4,jquery2.0用不了: ...
- jQuery-1.9.1源码分析系列(六) 延时对象续——辅助函数jQuery.when
$.when的说明 描述: 提供一种方法来执行一个或多个对象的回调函数,返回这些对象的延时(Deferred)对象. 说明(结合实例和源码): 如果你不传递任何参数, jQuery.when()将返 ...
- 使用fiddler的autoResponder及设置手机端代理实现远程调试,出现的问题及解决办法
这是开通博客的第一篇随笔,好鸡冻哈哈o_O 首先是下载安装,我安装的是最新的v4.6.2.0版本,大家在百度上搜fidddler4在百度软件中心普通下载就可以了.或者直接用这个连接:http://dl ...
- WCF 中 TCP 与 HTTP 性能简单比较
在使用 WCF 时,为了更好地进行调试,我都选择了 HTTP 协议进行数据传输.最近项目对性能要求比较高,所以就换成了使用 TCP 协议.并对二者的性能进行了一个简单的测试.以下是测试结果: 环境: ...
- 网页中多个图标在一张图片上,使用css将各图标显示
现在的网页中显示很多图标算是常态,发现项目中页面上用到的图标都是单个图标单个文件,用的时候直接往页面上挂,这确实很常态. 如果,网站是挂在外网上,或者网速过低,又大量使用图标的情况下,由于浏览器和服务 ...
- 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS"
无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间 2011-0 ...