首页
学习
活动
专区
圈层
工具
发布

SQL分组查询后取每组的前N条记录

首先,我们知道MySQL数据库分组功能主要是通过GROUP BY关键字来实现的,而且GROUP BY通常得配合聚合函数来使用用,比如说分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)...而业务系统的官网上需要滚动展示一些热门资讯信息列表(浏览量越大代表越热门),而且每个类别的相关资讯记录至多显示3条,换句话:“按照资讯分类分组,取每组的前3条资讯信息列表”。...一、数据准备 数据库: MySQL 8.0社区版 表设计 资讯分类表: id 主键 name 分类名称 资讯信息记录表: code 说明 id 主键 title 资讯名称 views 浏览量 info_type_id...资讯信息记录表 需求 :取热门的资讯信息列表且每个类别只取前3条。 二、核心思想 一般意义上我们在取前N条记录时候,都是根据某个业务字段进行降序排序,然后取前N条就能实现。...这时候我们就想到了子查询,而且MySQL是可以实现这样的功能子查询的。

27.8K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    oracle修改sequence最大最小值_oracle取最大值的记录

    默认值为1 minvalue:可选的子句,决定序列生成的最小值。 maxvalue:可选的子句,决定序列生成的最大值。 start: 可选的子句,制定序列的开始位置。...cycle: 可选的关键字,当序列到达最大值(maxvalue)或者最小值(minvalue)时可复位并继续下去。如果达到极限。生成的下一个数据将分别是最小值或者最大值。...如果使用NO CYCLE 选项,那么在序列达到最大值或最小值之后,如果再试图获取下一个值将返回一个错误。 order: 该选项可以保证生成的序列值是按顺序产生的。...例如: select seq_dept from dual; 当sequence的值到达了最大值之后,若选择了cycle属性,那么会复位到最小值继续增加依次循环。

    3.3K60

    通过常见的业务掌握SQL高级功能

    前言: 本文使用的窗口函数需要Mysql8 阅读需要10分钟,题目有一定难度 1、窗口函数 基本语法: over (partition by order by 取每组最大值 案例:按课程号分组取成绩最大值所在行的数据 select 课程号,max(成绩) as 最大成绩 from score group by 课程号; 分组取每组最小值 案例:按课程号分组取成绩最小值所在行的数据...(意思是每个课程最小值的学生信息都要出来) 关联子查询 select * from score a where 成绩=( select min(成绩) from score b where b.课程号...order by 加上去如果是用avg,sum这样的函数的话就是计算相邻的数据,所以如果遇到要每组数据大于平均数据的业务问题的话就不能加order by了,不然出来的平均数就不对了 窗口函数使用场景 1...)经典top N问题 找出每个部门排名前N的员工进行奖励 2)经典排名问题 业务需求“在每组内排名”,比如:每个部门按业绩来排名 3)在每个组里比较的问题 比如查找每个组里大于平均值的数据,可以有两种方法

    1.7K41

    记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

    我:滚,我不认识你 需求背景   环境 MySQL 版本:8.0.27   有四张表:业务信息表、任务表、业务任务表、任务执行日志表 CREATE TABLE `t_business` ( `...这里也就对应了文章的标题:分组后取每组的第 1 条记录     实现方式其实有很多,我这里提供一种,如下     结合索引 idx_status_task_date_modify(exec_status...总结   1、大家写 SQL 的时候,一定要多结合执行计划来写 神奇的 SQL 之 MySQL 执行计划 → EXPLAIN,让我们了解 SQL 的执行过程!   ...,多和需求方沟通     多和同事沟通,集思广益,说不定就找到合适的解决方案了     多和需求方沟通,多谈谈个人的见解,也许需求改动一丢丢,但我们实现却容易很多   4、留疑     1、分组后如何取前...N 条     2、分组后如何取倒数 N 条

    2.4K40

    select 进阶查询

    group by 连用  ④ 分组查询中,若一个字段在一个组内有多个结果,则后一个结果覆盖前一个结果 1.1.2 聚合函数 函数名 说明 max( ) 查询指定列的最大值 min( ) 查询指定列的最小值...limit_count; ☞ 注意  ① limit_offset:表示偏移量,即:跳过多少行,limit_offset 可以省略,默认为 0;  ② limit_count:跳过 limit_offset 行之后开始取数据...,取 limit_count 行记录;  ③ limit 中 limit_offset 和 limit_count 的值必须大于等于 0,也不能用表达式表示。  ...④ limit 为 MySQL 的 “方言” 在其他 SQL 中不一定能用。...limit limit_offset, limit_count; 1.4.2 示例   查询 mydata 表中 money 小于 400 的数据中 number 大于 3 的数据并按 name 分组,按照每组数据条数倒序

    1.5K51
    领券