mysql查询各种类型的前n条数据

2024-02-05 22:58

本文主要是介绍mysql查询各种类型的前n条数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:http://www.likezhou.com/find/11681.html

查询各种类型的前n条数据的的sql写法,有好几种:

假设要查询每种分类点击量前三的数据,type为类型字段,clickNum为点击数。

第一种:

select

*

from

table AS a

where

(select COUNT(*) from table AS b where

b.type= a.type

AND

b.clickNum >= a.clickNum) <= 3

ORDER BY a.type_id asc,a.clickNum DESC;

 

用上面的方法,有一个问题,就是如果记录的点击数刚好有一摸一样的,就容易漏掉数据。而且如果数据量一大,上面的查询性能是非常差的。基本是数据条数的平方这样的量级。比如如果有100条数据,那可能就是要查询10000次。

 

第二种:是国外某个人写的一种方法,测试过,可以用。

 

set @num := 0, @type := '';           

SELECT * FROM 

(SELECT *, 

@num := if(@type = type, @num + 1, 1) as row_num,

@type := type 

FROM table

order by type ASC,clickNum DESC)

as temp

WHERE temp.row_num <=3;

 

这个的查询效率就还ok,扫描的量级相比上面是控制在o(n)这种量级,性能提升是很明显的,不过有个问题,如果你用mybatis操作数据库,这个代码貌似运行不成功,或者并没有得到自己想要的结果。具体原因我也不知道,有知道的麻烦告诉我一下。

 

第三种,我最后采用的方式,就是用union all。写法如下:

(select * from table where type = 'apple' order by price limit 2)
union all
(select * from table where type = 'orange' order by price limit 2)
union all
(select * from table where type = 'pear' order by price limit 2)
union all
(select * from table where type = 'cherry' order by price limit 2)

 

说白了对每种类型根据你所要条件进行查询,然后用union all进行连接即可。当然我之所以采用这种方式是因为在mybatis里面也可以实现写法,如下

 

<select id="selectdatabyType" resultMap="ResultMapWithBLOBs" ><foreach collection="list" item="item" index="index" separator="union all">(select<include refid="Base_Column_List" />fromtable where type = ${item.id} and status=1 order by clickNum DESC      limit 0,3)</foreach>
</select>

上面的实现的关键是,记得加()。

这篇关于mysql查询各种类型的前n条数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682433

相关文章

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

Redis中的数据一致性问题以及解决方案

《Redis中的数据一致性问题以及解决方案》:本文主要介绍Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Redis 数据一致性问题的产生1. 单节点环境的一致性问题2. 网络分区和宕机3. 并发写入导致的脏数据4. 持

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配