mysql-利润set变量模拟分组查询每组中的第N条数据
2016-04-15 13:52
801 查看
查询思路:
很多时候想在使用group by时想查询group by的每一组中的第N条数据,而取这些数据时往往按如下方式去执行则很慢
按如上方式,对于数据10000左右的表就已经很吃不消。
或已拼接结构的方式
等等这些单存对sql来说并不是想要的方案,效率太慢,
如下,是借用mysql的set变量来处理,10w的数据效率还不错,就贴出来了。
在如下结果集中
标记好的结果
sql语句(为取其中的某一类型)
如有更好的欢迎分享
很多时候想在使用group by时想查询group by的每一组中的第N条数据,而取这些数据时往往按如下方式去执行则很慢
SELECT * FROM test main WHERE (SELECT COUNT(1) FROM test sub WHERE main.uid = sub.uid AND main.gid > sub.gid ) < 3;
按如上方式,对于数据10000左右的表就已经很吃不消。
或已拼接结构的方式
SELECT t.a,t.b ,substring_index( group_concat( IFNULL(t.c,0)ORDER BY t.itime DESC ), ",", 3 ) c ,substring_index( group_concat( t.itime ORDER BY t.itime DESC ),",", 3) time FROM t t GROUP BY t.a ,t.b;
等等这些单存对sql来说并不是想要的方案,效率太慢,
如下,是借用mysql的set变量来处理,10w的数据效率还不错,就贴出来了。
在如下结果集中
标记好的结果
sql语句(为取其中的某一类型)
set @rowNO = 0;-- 定义序列变量 set @codeTemp = '';-- 定义每组区别变量 select * from ( select i.* ,-- 字段值 if(@codeTemp=stockCode,@rowNO := @rowNo+1,@rowNO := 0) AS rowno,-- 赋值序列 @codeTemp:=stockCode as stockCode1 -- 赋值区别 from ( select i.stockCode,i.endDate,i.JingLiRun from income_statements i WHERE i.endDate like '%-12-31' order by stockCode,i.endDate desc -- 可自定义的临时表数据 ) i ) i where i.rowno = 1 -- 取每组第N条
如有更好的欢迎分享
相关文章推荐
- mysql安装报错解决一例
- MySQL学习笔记:MySQL ERROR 1300 (HY000): Invalid utf8 character string
- MySQL 服务无法启动-问题处理
- scala+play2.2.2+slick2.0.2 + mysql5.0整合之一---基础环境搭建篇
- mysql忽略主键冲突、避免重复插入的几种方式
- MySQL索引原理及慢查询优化
- 安装mysql 5.5.8 Error Nr.1364 authentication_string
- MySQL中优化sql语句查询常用的30种方法
- MySQL OnlineDDL
- mysql-5.6主从同步配置示例
- Windows7-32位系统下R语言链接mySQL数据库步骤
- MySql5.7.11编译安装及修改root密码的方法小结
- 王高利:MySQL备份脚本_mysqldump
- MYSQL数据库中cmd命令操作详解
- MySQL查看并修改当前数据库编码
- 复杂sql (mysql)
- mysql查询结果输出到文件
- MySQL免安装版 安装,卸载,找不到指定文件
- MySQL免安装版下载与配置
- MySQL查询order by相减select相减的Sql语句