博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 排名、分组后组内排名、取各组的前几名
阅读量:6251 次
发布时间:2019-06-22

本文共 1389 字,大约阅读时间需要 4 分钟。

一、排名

/*普通排名:从1开始,顺序往下排*/SELECT cs.*,@r :=@r + 1 AS rankFROM cs,(SELECT @r := 0) rORDER BY score;

/*并列排名:相同的值是相同的排名*/SELECT cs.* ,CASE WHEN @p=score THEN @rWHEN @p:=score THEN @r:=@r+1END rankFROM cs,(SELECT @r:=0,@p:=NULL)rORDER BY score;

 

/*并列排名:相同的值名次相同,与上例中的并列排名不同*/SELECT city,score,rankFROM(SELECT cs.*,@c:=IF(@p=score,@c,@r) AS rank,@p:=score,@r:=@r+1FROM cs ,(SELECT @p:=NULL,@r:=1,@c:=0)rORDER BY score)c

 

 

 二、分组后组内排名

/*分组普通排名:顺序排名*/SELECT city,score,rankFROM(SELECT cs.*,IF(@p=city,@r:=@r+1,@r:=1) AS rank,    @p:=cityFROM cs,(SELECT @p:=NULL,@r:=0)rORDER BY city,score)s;

 

/* 分组后并列排名:组内相同数值排名相同*/SELECT city,score,rankFROM(SELECT *,IF(@p=city,    CASE        WHEN @s=score THEN @r       WHEN @s:=score THEN @r:=@r+1    END,   @r:=1 ) AS rank,@p:=city,@s:=scoreFROM cs,(SELECT @p:=NULL,@s:=NULL,@r:=0)rORDER BY city,score )s;

 

 三、分组后取各组的前两名

/*取每组分数高的前两个,法一*/SELECT city,score,rankFROM(SELECT *,IF(@p=city,    CASE         WHEN @s=score THEN @r        WHEN @s:=score THEN @r:=@r+1    END,  @r:=1 ) AS rank,@p:=city,@s:=scoreFROM cs,(SELECT @p:=NULL,@s:=NULL,@r:=0)rORDER BY city,score DESC )sWHERE rank <3;

/*分组后取前两个,法二*/SELECT * FROM cs cWHERE (    SELECT count(*) FROM cs    WHERE city=c.city AND score>c.score )<2  ORDER BY city,score DESC

 

 参考:

https://www.jianshu.com/p/bb1b72a1623e

http://blog.sina.com.cn/s/blog_4c197d420101e408.html

 

转载于:https://www.cnblogs.com/niniya/p/9046449.html

你可能感兴趣的文章
骨架屏(Skeleton Screen)在Android中的应用
查看>>
Spring源码分析(三)手写简单的IOC容器和解决循环依赖问题
查看>>
MySQL索引笔记
查看>>
vue-router 嵌套路由
查看>>
java注解基础与使用
查看>>
Java 8中的Optional: 如何正确使用?
查看>>
处理请求(AFURLRequestSerialization)和响应(AFURLResponseSerialization)
查看>>
仿抖音 火山视频滑动播放
查看>>
100G Python从入门到精通!自学必备全套视频教程+python经典书籍!
查看>>
自定义有多个按钮节点的SliderView
查看>>
区块链:起源、原理及应用
查看>>
如何在Rancher 2.2 Preview2上部署和管理多K8s集群应用
查看>>
Redis中的lru算法实现
查看>>
【PHP 扩展开发】Zephir 简介
查看>>
猫叔产品读记 | 全时关店潮、那些记得住的2019春节营销案例(2期)
查看>>
Docker CE 18.06在线安装和RPM包安装
查看>>
PAT A1045 动态规划
查看>>
前端常用设计模式(1)--装饰器(decorator)
查看>>
gdb 如何调用函数?
查看>>
93. Restore IP Addresses
查看>>