数据:

一、整体排名(3种)

-- 普通排名:从1开始,顺序往下排

set @rank =0;select     city ,    score,     @rank := @rank+1 rank from     cs order by     score desc;

-- 并列排名:相同的值是相同的排名,不用占空位

set @rank=0,@price=null;select cs.* , case when @price = score then @rank  when @price := score then @rank := @rank+1 end rank   from cs order by score desc; -- 当查询的score 值 = @price时,输出@rank, -- 当不等时,将score值赋给@price ,并输出@rank := @rank+1 -- 或者set @rank=0,@price=null;select a.city,a.score,a.rank from (select cs.*,@rank := if(@p=score,@rank,@rank+1) rank,@p := scorefrom cs order by score desc) a;

-- 并列排名:相同的值是相同的排名,需要占空位

set @rank=0,@price=null, @z=1;select a.city,a.score,a.rank from (select cs.*,@rank := if(@p=score,@rank,@z) rank,@p := score,@z :=@z+1from cs order by score desc) a;

二、分组后组内排名(3种)

-- 分组普通排名:顺序排名

set @rank=0,@c=null;select cs.city,cs.score,@rank := if(@c = city,@rank+1,1) rank,@c := cityfrom cs order by cs.city,cs.score;

-- 组内并列排名:相同的值是相同的排名,不需要占空位

set @rank=0,@c=null,@s=null;select cs.city,cs.score,@rank := if(@c=city,if(@s=score,@rank,@rank+1),1) rank ,@c := city,@s :=score from cs order by cs.city,cs.score;

-- 组内并列排名:相同的值是相同的排名,需要占空位

set @rank=0,@z=0,@c=null,@s=null;select cs.city,cs.score,@z := if(@c=city,@z+1,1),@rank := if(@c=city,if(@s=score,@rank,@z),1) rank,@c := city,@s :=score from cs order by cs.city,cs.score;

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

-- 方法1:按照分组排名的三种方式,然后限定排名的值

set @rank=0,@z=0,@c=null,@s=null;select a.city,a.score,a.rank from (select cs.city city,cs.score score,@z := if(@c=city,@z+1,1),@rank := if(@c=city,if(@s=score,@rank,@z),1) rank,@c := city,@s :=score from cs order by cs.city,cs.score desc) awhere a.rank<=2;

-- 方法2:内部查询

SELECT * FROM cs cWHERE (    SELECT count(*) FROM cs    WHERE c.city=cs.city AND c.score2  ORDER BY city,score DESC;

mysql 排名_SQL语句mysql排名、分组后组内排名、取各组的前几名相关推荐

  1. mysql分组后组内排名_SQL实现group by 分组后组内排序

    在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...

  2. stream list 分组后组内排序

    最近开发遇到了一个需求,需要对list按某个字段分组,分组后需要对组内的list按某个字段排序,经过各种探索有了下边的解决方法,不知道有没有更好的方法package com.sensedeal.ind ...

  3. mysql分组后组内排序_数据小白的转行之路-MYSQL(七)

    目录 一. 什么是窗口函数? 1. 什么是窗口函数 窗口函数,可以对数据库数据进行实时分析处理. 基本语法如下: <窗口函数> over by (partition by <要分组的 ...

  4. 关于oracle分组后组外排序的问题

    [求助]关于oracle分组后组外排序的问题 只用查询语句实现: DEPTNO ENAME                SAL          TOP3 ---------- ---------- ...

  5. Java stream 处理分组后[升降序key]取每组最大

    Java stream 处理分组后[升降序key]取每组最大 一. 需求 二. 整活 git仓库直达 如何让同事看不懂你写的代码 然后觉得你非常牛逼 这里用到了stream()与Lambda 需要有点 ...

  6. 用sumproduct函数计算组内排名

    需求:计算组内排名,例如B组最大值是99,则D4应返回1,A组最小是53,则D15返回6 文档示意: 公式(D4单元格): '=SUMPRODUCT(($B$4:$B$15=B4)*($C$4:$C$ ...

  7. mysql 取分组数据的前几名(1)

    目前有需求需要取分组数据的前几名,有如下的解决方案来实现 具体数据库如下 SQL写法: SELECT* FROMstudent_grade AS a WHERE( SELECT coun ( * ) ...

  8. mysql统计去重记录数量_MySQL分组后,如何统计记录条数

    MySQL分组后,统计记录条数的方法:1.统计记录条数,代码为[SELECT num,count(*) AS counts from test_a GROUP BY num]:2.对num去重后的数量 ...

  9. mysql分组后组内排序_图解排序 3/10 希尔排序

    希尔排序,它是由 D.L.Shell 于1959 年提出而得名.根据它的名字很难想象算法的核心思想.[ 所以只能死记硬背了,面试官问:希尔排序的思想是什么?].它的核心思想是把一个序列分组,对分组后的 ...

最新文章

  1. python slice是共享内存吗_在共享内存中使用numpy数组进行多处理
  2. 使用Nginx为Leanote配置Https
  3. Visual Studio 2017 15.7预览版发布
  4. asp.net开发中自定义网站的目录
  5. Android 在Fragment中执行onActivityResult不被调用的简单解决方法
  6. 以不同的维度去看待问题
  7. boost::hana::Comparable用法的测试程序
  8. 静态作用域与动态作用域的区别(转)
  9. 电脑底部任务栏点不动_15个小技巧,让我的Windows电脑更好用了!
  10. mac 电脑连接不上github_Mac版爱思助手【手机投屏直播】工具使用教程
  11. 浅读《构建之法:现代软件工程》有感
  12. 布谷鸟算法的程序(个人注释)
  13. AI 生成歌曲《醒来》(可试听)
  14. 经颅电刺激促进睡眠振荡及其功能耦合增强轻度认知障碍患者的记忆巩固
  15. 【论文写作】Latex在线创作工具overleaf及账号注册办法
  16. 《数据结构(C语言版)》严巍敏课件~第二章:线性表
  17. 删除字符串某一指定子字符串
  18. Debian字体美化
  19. 115.n阶方阵求逆
  20. 使用 Python+request 实现登入淘宝

热门文章

  1. 某些服务在未由其他服务或程序使用时将自动停止
  2. 嵌入式软件设计第九次实验报告-140201235-陈宇
  3. Stanford Machine Learning 学习 2016/7/4
  4. 转:jQuery常用插件
  5. Hawk搜索引擎平台0.6.9测试版(提供下载)
  6. 百年后你怎么在墓碑上留言?
  7. 人工智能指用计算机,人工智能测试题..doc
  8. android 字体点击变色,Android TextView 中实现部分文字变色以及点击事件
  9. python爬虫--自学笔记
  10. 江西职业教育集团计算机应用竞赛,【喜报】江西工业职院电子与信息工程学院学生在计算机应用竞赛钟喜获佳绩...