SQL分组排序再取前N条记录

  • SQL分组排序再取前N条记录
    • 场景设定
      • 初始数据
      • 多种情况:1-高版本(本人MySql8.0+)
      • 多种情况:2-中版本(MySql5.6+)
      • 多种情况:3-低版本(MySql5.6及以下)
      • 关键说明
      • 关键SQL

SQL分组排序再取前N条记录

SQL写的溜,逻辑少一堆,不多说直奔主题。。。

场景设定

统计班级中每个科目考试前3名的学生名单(要求按每科成绩降序排序)

初始数据

多种情况:1-高版本(本人MySql8.0+)

多种情况:2-中版本(MySql5.6+)

多种情况:3-低版本(MySql5.6及以下)

关键说明

1、MySQL低版本不支持 ROW_NUMBER() over ( PARTITION BY xxx )函数;
2、MySql5.7版本做了升级, 针对mysql本身的优化器增加了一个控制优化器的参数叫 derived_merge (“派生类合并”)。因为派生类合并的开启影响了查询结果,通过下拉关键词可临时禁止合并。

可以通过在子查询中使用任何阻止合并的构造来禁用合并,尽管这些构造对实现的影响并不明确。 防止合并的构造对于派生表和视图引用是相同的:
1.聚合函数( SUM() , MIN() , MAX() , COUNT()等)
2.DISTINCT
3.GROUP BY
4.HAVING
5.LIMIT
6.UNION或UNION ALL
7.选择列表中的子查询
8.分配给用户变量
9.仅引用文字值(在这种情况下,没有基础表)

具体可参加:https://blog.csdn.net/undefinedAuth/article/details/99291739

关键SQL

SELECTaa.*
FROM( SELECT *, ROW_NUMBER() over ( PARTITION BY menu ORDER BY score DESC ) AS xx FROM student ) aa
WHEREaa.xx = 1 -- IN (1,2)

SQL分组排序再取前N条记录相关推荐

  1. LeetCode-185 : sql分组排序再取前几位

    题目描述:在EMPLOYEE表中查询每个部门工资前三高的员工. 题目分析: 题目中还是已经描述的比较清楚,比如某个部门工资按从高到低排序为9000,8900,8900,8500,8000-那么该部门需 ...

  2. mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园

    -- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...

  3. SQL 分组排序后取值

    SQL 分组排序后取值 场景前要: 从前有三个班级,每个班级的学生成绩各异,有一天睿智的校长希望知道这一年中,每个班级近一年里所有的学生成绩信息,和查询每个班级近一年里所有第一名的学生成绩信息,故事由 ...

  4. oracle 取前10条记录

    1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...

  5. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

    前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.         oracle里面可以通过row_number() OVER (PARTIT ...

  6. oracle和sql server中,取前10条数据语法的区别

    在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...

  7. Oracle分组取前n条记录

    2019独角兽企业重金招聘Python工程师标准>>> create table cl_aa as select modi_staff_id,jm,count(*) numb fro ...

  8. SQL实现分组查询取前几条记录

    我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...

  9. mysql实现每组取前N条记录的sql,以及后续的组数据量限制

    应用场景大概是这样的:比如有很多消息流,这些消息来自不通的app,聚合在一个页面上,查看的时候不能让一个app的消息霸屏,所以就会类似于折叠功能,同一个app的消息只显示最多5条,再多的话,就要点进去 ...

  10. php sql跳过前四条数据,mysql实现每组取前N条记录的sql,以及后续的组数据量限制...

    select a.msg_id, a.com_id, a.data, a.ctime from sns_user_03.user_request_86 a where 5 (select count( ...

最新文章

  1. 【git效率篇】在window上面的git bash 配置永久别名 快捷方式
  2. flex制作swc文件
  3. Python 动态载入模块
  4. python dash_Dash是Databricks Spark后端的理想基于Python的前端
  5. mysql基准性能测试标准_mysql性能测试与优化——(一),基准测试套件
  6. 揭秘“清华园”的“N”种打开方式!
  7. 工业视觉中的目标检测——兼谈天池大赛优胜方案
  8. ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
  9. C#中的@符号的使用
  10. 无线网卡没有linux驱动,ubuntu18.04没有无线网卡驱动怎么办?
  11. python36.dll下载_python36.dll
  12. 写python的笔记本_python笔记本:更改写入的fi
  13. JAVA对象,直接新建跟反射新建,有区别
  14. JSP实用教程(2)——JSP语法
  15. linux 内核态 抓屏代码,Android screencap截屏指令
  16. QDU首届易途杯大赛-kk与cillyb的荣誉之战
  17. 数据仓库:维度分析和指标
  18. 我终于读懂了适配器模式。。。
  19. 【过分】Python监控小姐姐/小哥哥微博,了解一下??
  20. 【QT数字图像处理】(三)QSlider滑块学习

热门文章

  1. 博途的多步过程控制, 寄存器寻址
  2. HTML计算平均成绩,成绩平均分怎么算
  3. 计算机考研专业课资料百度云,考研专业课资料(一)
  4. 互联网日报 | 1月27日 星期三 | 支付宝集五福活动2月1日开启;华为否认“出售手机业务”传闻;中国联通自有手机品牌发布...
  5. 分享按钮-新浪微博开放平台
  6. shping cloud搭建大觅网-之sping cloud初体验
  7. 电脑文件无法删除怎么办?
  8. opencv-之求直线的斜率
  9. JAVA高级工程师知识树
  10. 通过路由器端口映射实现外网IP访问内网服务器