首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

而业务系统的官网上需要滚动展示一些热门资讯信息列表(浏览量越大代表越热门),而且每个类别的相关资讯记录至多显示3条,换句话:“按照资讯分类分组,取每组的3条资讯信息列表”。...一、数据准备 数据库: MySQL 8.0社区版 表设计 资讯分类表: id 主键 name 分类名称 资讯信息记录表: code 说明 id 主键 title 资讯名称 views 浏览量 info_type_id...资讯分类 资讯信息记录表示例数据如下: ? 资讯信息记录表 需求 :取热门的资讯信息列表且每个类别只取3条。...二、核心思想 一般意义上我们在取N条记录时候,都是根据某个业务字段进行降序排序,然后取N条就能实现。...但是当你仔细阅读我们的题目要求,你会发现:“它是让你每个类型下都要取浏览量的3条记录”。 一种比较简单但是粗暴的方式就是在Java代码中循环所有的资讯类型,取出每个类型的3条记录,最后进行汇总。

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

    mysql分组取最大(最小、最新、N条)条记录

    在数据库开发过程中,我们要为每种类型的数据取出几条记录,或者是取最新、最小、最大等等,这个该如何实现呢,本文章向大家介绍如何实现mysql分组取最大(最小、最新、N条)条记录。...('b', 5, 'b5'); 数据表如下: name val memo a 2 a2 a 1 a1 a 3 a3 b 1 b1 b 3 b3 b 2 b2 b 4 b4 b 5 b5 name...分组取val最大的值所在行的数据 方法一: select a.* from tb a where val = (select max(val) from tb where name = a.name)...name分组取val最小的值所在行的数据 方法一: select a.* from tb a where val = (select min(val) from tb where name = a.name...where name = a.name and val < a.val) order by a.name 以上五种方法运行的结果均为如下所示: name val memo a 1 a1 b 1 b1 name

    9.1K30

    类比MySQL,学习Tableau

    3)条件筛选器 案例:只显示家具类,只含“书架”、“桌子”子类并且销售总额大于1000000元并且利润大于300000元的子类。 ① 先给出不同类别、不同子类别下的利润和销售额 ?...4)tableau顶部筛选器(类似于mysql中的limit) 案例:显示家具类产品中,销售额最好的3个子类别 ① 先列出不同类别、不同子类别下的销售额情况 ? ② 选择家具类别的产品 ?...③ 使用顶部筛选器:顶部代表展示最大的几条记录;底部代表展示最小的几条记录 注意:这个并不表示排序,排序在下面会讲到。 ? ④ 上述操作的结果有一个缺陷:应该是3条结果,但是只展示了2条结果。 ?...5)tableau通配符筛选器(类似于mysql中的like) 案例:以“罗枝”打头的产品并且销售额大于5000的产品名称 ① 展示不同产品名称的销售额 ?...① 文件夹分组为例说明 Ⅰ 选择“文件夹分组” ? Ⅱ 选择“创建文件夹” ? Ⅲ 给文件夹命名 ? Ⅳ 将“订单名称”、“订单ID”拖动到文件夹中,最终效果如下 ?

    2.2K10

    类比MySQL——学习tableau

    3 ③ 再将“销售额”拖动到“筛选器”中,在选择“总和”,再点击“下一步” ④ 当出现如下这个界面,选择“至少”,在填写100000,最后点击“确定” ⑤ 最终效果如下 3)条件筛选器 案例:只显示家具类...4)tableau顶部筛选器(类似于mysql中的limit) 案例:显示家具类产品中,销售额最好的3个子类别 ① 先列出不同类别、不同子类别下的销售额情况 ② 选择家具类别的产品 ③ 使用顶部筛选器...:顶部代表展示最大的几条记录;底部代表展示最小的几条记录 注意:这个并不表示排序,排序在下面会讲到。...⑤ 点击常规,并完成如下操作 ⑥ 最终效果如下 5)tableau通配符筛选器(类似于mysql中的like) 案例:以“罗枝”打头的产品并且销售额大于5000的产品名称 ① 展示不同产品名称的销售额...① 文件夹分组为例说明 Ⅰ 选择“文件夹分组” Ⅱ 选择“创建文件夹” Ⅲ 给文件夹命名 Ⅳ 将“订单名称”、“订单ID”拖动到文件夹中,最终效果如下 9)计算字段

    2.4K20

    详述 SQL 中的 distinct 和 row_number() over() 的区别及用法「建议收藏」

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称记录,从而在检索的时候...说白了,就是对同一字段让拥有相同内容的记录只显示一条记录。 那么,如何实现“去重”的功能呢?对此,咱们有两种方式可以实现该功能。...两者使用的语法为: ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) 意为:将表中的记录字段 COLUMN1进行分组字段 COLUMN2...那么反过来分析咱们运行的 SQL 语句,发现其确实字段 AGE 的值进行分组了,也字段 NAME 的值进行排序啦!因此,函数的功能得到了验证。...在使用函数 row_number() over() 的时候,其是分组排序后,再取出每组的第一条记录来进行“去重”的(在本篇博文中如此)。

    1.3K20

    详述 SQL 中的 distinct 和 row_number() over() 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称记录,从而在检索的时候...说白了,就是对同一字段让拥有相同内容的记录只显示一条记录。 那么,如何实现“去重”的功能呢?对此,咱们有两种方式可以实现该功能。...两者使用的语法为: ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) 意为:将表中的记录字段 COLUMN1进行分组字段 COLUMN2...那么反过来分析咱们运行的 SQL 语句,发现其确实字段 AGE 的值进行分组了,也字段 NAME 的值进行排序啦!因此,函数的功能得到了验证。...在使用函数 row_number() over() 的时候,其是分组排序后,再取出每组的第一条记录来进行“去重”的(在本篇博文中如此)。

    2.3K70

    MySQL数据库基础(十):DQL数据查询语言

    product; # 3.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示. select pname,price+10 from product; 四、条件查询 1、比较查询 # 查询商品名称为...WITH ROLLUP:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果 2、group by的使用 group by可用于单个字段分组,也可用于多个字段分组 -- 根据...案例演示: #1 统计各个分类商品的个数 SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ; #2 统计各个分类商品的个数,且只显示个数大于...FROM 表名 LIMIT M,N M: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数 N: 整数,表示查询多少条数据 SELECT 字段1,字段2......FROM 表名 LIMIT M,N M: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数 N: 整数,表示查询多少条数据

    11510

    Wireshark从入门到放弃

    重新开始 4 抓包设置 用来设置抓包参数 5 打开数据包文件 打开离线or保存的数据包 6 保存数据包 保存数据 7 关闭捕获文件 关闭当前 8 重新加载 重新加载 9 查找 查找数据(最常用) 10 转到一个分组...分组数据跳转 11 转到下一个分组 分组数据跳转 12 转到特定分组 分组数据跳转 13 转到首个分组 分组数据跳转 14 转到实时分组 分组数据跳转 15 抓包时跟随最新分组 实时到最新分组 16...Time 表示捕获包的时间 2 source 表示来源地址 3 Destination 表示目的地址 4 Protocol 表示协议名称 5 Length 表示数据包的长度 6 Info 表示数据包的信息...过滤HTTP 只显示HTTP协议的数据包 http 只显示GET请求的数据的数据包 http.request.method == "GET" 只显示gost请求的数据的数据包 http.request.method...效果如下: 抓取密码(仅http网站有效) http.request.method == "GOST" 查找QQ号(手机) ctrl+f 搜索十六进制 00 00 00 00 0d ----

    1.8K50

    Python 数据分析初阶

    city 这样的数据看起来不是特别让人喜欢,这个时间我们可以给他排个序: data1.mean().sort_values(ascending=False) 现在看起来好多了,但是有点多了,我们只想看几条记录...df['city'] == 'beijing') & (df['pr'] >= 4000), 'sign'] = 1 对 category 字段的值依次进行分列,并创建数据表,索引值 df 的索引列,列名称为...iloc: 位置进行提取 ix: 可以同时标签和位置进行提取 具体的使用见下: df.loc[3]: 索引提取单行的数值 df.iloc[0:5]: 索引提取区域行数据值 df.reset_index...,两列,这里的数据不同去是索引的标签名称,而是数据所有的位置 df.iloc[[0,2,5],[4,5]]: 提取第 0、2、5 行,第 4、5 列的数据 df.ix[:'2013',:4]: 提取...df.groupby('city').count(): city 列分组后进行数据汇总 df.groupby('city')['id'].count(): city 进行分组,然后汇总 id

    1.3K20

    inner join 与 left join 之间的区别

    需求是从数据库查数据,在前端以柱形图的形式展现出来,查到的数据行业分组,显示每个行业的户数及户数占比,涉及到的字段有A表的用户数、总用户数和B表的行业名称。...本来是不管查不查的到数据,在X轴都应该显示行业名称的,结果是X、Y轴都没有任何数据显示。问题就是我用错了联结方式。...换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)....     2006032402 3     a20050113    3     2006032403 4     a20050114    4     2006032404 结果说明: 很明显,这里只显示出了...A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

    78810

    GROUP BY与COUNT用法详解

    by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID,DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; 通俗一点说:group by 字段1,...(整个表中不止这两个字段)表示数据集中字段1相等,字段2也相等的数据归为一组,只显示一条数据。...为什么呢,根据前面的说明:DepartmentID相等的数据归为一组,只显示一条记录,那如果数据集中有这样三条数据。...到这里有三种选择: 把DepartmentName也加入到分组的条件里去(GROUP BY DepartmentID,DepartmentName),那这三条记录就是三个分组。...HAVING子句可以使用聚合函数 WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句

    2.3K20

    神奇的 SQL ,高级处理之 Window Functions → 打破我们的局限!

    ,然后组内售价从高到低进行排名, SQL 又该如何写   有小伙伴一看到分组二字,第一反应肯定想到了 GROUP BY ,不只是你们,我也是一样的   但 GROUP BY 往往结合 聚合函数 使用,...,与 SELECT 子句末尾的 ORDER BY 子句完全相同   通过 PARTITION BY 分组后的记录集合称为“窗口”,代表“范围”。...这也是 窗口函数 名称的由来   DENSE_RANK   一看名字就知道跟 RANK 有关系,为了对比它俩的区别,需要补充几条数据 INSERT INTO tbl_ware VALUES (9,'带帽卫衣...DESC) AS row_num FROM tbl_ware;   此刻大家应该想起点什么了   分组N条,是不是很适合用这种方式实现?   ...我都跟你们实现好了:MySQL 分组排序后 → 如何取N条或倒数N条   还有其他的 专用窗口函数 就不一一做介绍了,大家可以去各个数据库的官网进行查阅 聚合函数的窗口化使用   所有的 聚合函数 都能用作窗口函数

    19810

    掌握这些SQL面试题再也不怕面试懵逼了

    这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。...案例:课程号分组取成绩最大值所在行的数据 select 课程号,max(成绩) as 最大成绩 from score group by 课程号; ? 这样子没有学号。...案例:查询各科成绩两名的记录 (select * from score where 课程号 = '0001' order by 成绩 desc limit 2) union all (select...因为是计算每个学号学生的成绩所以学号来分组。 数据库优化 (重点!!!) 我们公司的数据量非常大,需要的不仅仅是提取数据,要了解SQL方案优化的。...在工作中,如果你只想用or从几十万语句中取几条出来,是非常划不来的,怎么办呢?下面的方法可替代or。

    48841

    MongoDB 高级查询 aggregate 聚合管道

    例:要求查找 order 集合,只返回文档中 trade_no 和 all_price 字段,并只显示 all_price 大于等于90的记录。...管道操作符 $group 将集合中的文档进行分组,可用于统计结果。 例:统计每个订单的订单数量,按照订单号分组。...例:要求查找 order 集合,只返回文档中 trade_no 和 all_price 字段,只显示 all_price 大于等于90的记录,以all_price进行降序排列,并只显示1条记录。...管道操作符 $skip 对查询结果跳过几条记录进行显示。...例:要求查找 order 集合,只返回文档中 trade_no 和 all_price 字段,只显示 all_price 大于等于90的记录,以 all_price 进行降序排列,并跳过1条记录显示其结果

    2K31

    Mysql超详解

    SELECT 字段名称,...FROM 表名[WHERE 条件] 修改记录  UPDATE 表名 SET 字段名称=值,字段名称=值[WHERE 条件] 如果不添加条件,整个表中的记录都会被更新  ...分组配合GROUP_CONCAT()查看组中某个字段的详细信息 配合聚合函数使用 COUNT():统计记录总数 如果写的是COUNT(字段名称),字段中的值为NULL,不统计进来...,是上面所有记录的总和 HAVING子句对分组结果进行二次筛选 ORDER BY 排序 ORDER BY 字段名称 ASC|DESC LIMIT 限制结果集显示条数 LIMIT...值:显示结果集的几条记录 LIMIT offset,row_count:从offset开始,显示row_count条记录,offset从0开始 查询案例演示 再建一张user1表  -- 测试查询操作...-- 更新3条记录,将age+5  UPDATE user1 SET age=age+5 LIMIT 3;  ​  -- 按照id降序排列,更新三条记录,将age-10  UPDATE user1

    1.3K10

    面试题70:什么是页的目录项?

    生成Page Directory步骤如下: 首先,将非删除的数据(包含Infimum记录和Supremum记录)划分几个组。 【分组规则如下】 对于Infimum记录所在的分组只能有1条记录。...对于Supremum记录所在的分组只能在1~8条记录之间。 剩下的记录所在的分组只能在4~8条记录之间。...每个组的最后一条记录(即:也是这个组里,最大的那条记录)——“带头大哥”,其余的记录均为“组内小弟”;“大哥”记录的头信息中的n_owned属性表示该组内共有几条记录,而“小弟”的n_owned属性都为...0; 将“大哥”在页面中的地址偏移量取出来,顺序存储到靠近Page Trailer的地方。...答:由于每个槽都是挨着的,所以,我们可以通过找到一个槽中的最大主键值记录,这个记录的下一条记录(next_record),就是本槽的最小主键值记录

    24840
    领券