Mysql 分组选择
Mysql 分组选择
在其他的数据库中我们遇到分组选择的问题时,比如在分组中计算前10名的平均分
我们可以使用row_number()over() 比较方便的得到。
但是在mysql中,问题就被抛了出来,因为mysql并没有一个rownum内建数据元组访问方式。
在这里我提供三种方式来尝试解决
一.最基础的union的方式,放弃分组,采用union方式将多条查询的结果集放在一起做后续操作。 虽然我们可以在程序中预先获取所有分组,循环拼凑sql语句,但是这依然是很繁琐费时的,而且在目标需要分的组是海量的将会非常消耗系统资源。
二.使用采用子查询的方式,
例子
在上述语句中使用了一个子查询(select count(*))得到一个cnt数,这个数实际上是可以反映这条数据元组在他所在分组所排名名次的。
这种方式看似很美好,实际上子查询的效率出奇的烂,我实际跑起来,感觉mysql5.6对这样查询并没有多上优化,给每一条记录给出一个‘伪排名值’,天知道有多浪费资源。
三.使用group_concat()与substring_index配合解决
例子
Select substring_index(group_concat(report_period order by report_period desc),',',1) 。。。
通过一个额外的字段存放group_concat(),我们可以后续取出各个分组中对应排名的值,这可以算做一种化纵为橫。由于我们本来分组就要使用group by所以,group_concat()括号中的属性如果与外部的group by的属性一致并不会带来明显的开销增加。
不过由于返回的并不直接是我们需要的元组,而是一个排序属性值所以需要,在外嵌套一层查询
Mysql 分组选择的更多相关文章
- 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式
单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式 一 表结构如下: 万行 CREATE TABLE t_audit_operate_log ( Fid b ...
- Oracle和MySQL分组查询GROUP BY
Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...
- mysql 分组和聚合函数
mysql 分组和聚合函数 Mysql 聚集函数有5个: 1.COUNT() 记录个数(count(1),count(*)统计表中行数,count(列名)统计列中非null数) 2.MAX() 最大值 ...
- mysql 分组内 排序
mysql 分组内 排序 类似于 sqlserver over partition by 因为mysql中木有sqlserver over partition by这个函数,要从sqlserver ...
- MySQL索引选择不正确并详细解析OPTIMIZER_TRACE格式
一 表结构如下: CREATE TABLE t_audit_operate_log ( Fid bigint(16) AUTO_INCREMENT, Fcreate_time int(10) un ...
- 单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式
一 表结构如下: 万行 CREATE TABLE t_audit_operate_log ( Fid bigint(16) AUTO_INCREMENT, Fcreate_time int(10 ...
- mysql分组取最大(最小、最新、前N条)条记录
在数据库开发过程中,我们要为每种类型的数据取出前几条记录,或者是取最新.最小.最大等等,这个该如何实现呢,本文章向大家介绍如何实现mysql分组取最大(最小.最新.前N条)条记录.需要的可以参考一下. ...
- MySQL如何选择合适的索引
先来看一个栗子 EXPLAIN select * from employees where name > 'a'; 如果用name索引查找数据需要遍历name字段联合索引树,然后根据遍历出来的主 ...
- Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!
这是Mysql系列第9篇. 环境:mysql5.7.25,cmd命令中进行演示. 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区 ...
随机推荐
- ubuntu16.04 解决boot空间不足
1. dpkg --get-selections |grep linux-image #查看已安装内核版本号 2. uname -a #查看现运行版本 3. sudo apt-get purge 版本 ...
- 判断库中为字符串格式的时间是否为最近三个月(Java)
今天分享一个问题,就是标题中提到的问题,今天在调用一个接口的时候,发现调用到的数据的时间格式为字符串类型,我有点蒙圈,于是,我就百度解决了这个问题,同时在这里记录一下,为了之后不再蒙圈::: 首先需要 ...
- vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办
今天,打开了以前装过的vmware虚拟机,正常启动之后,一直想不起登录密码,怎么都是登录不进去.然后在网上查找资料,最后重置了密码.下面,分享下具体操作过程. 1.重新启动虚拟机,在出现启动进度条时按 ...
- Winscp无法连接linux虚拟机解决
之前需要从主机传文件到虚拟机上,安装了vmware tools,拖拽文件后发现文件总是会损坏一些,查了一下,使用Winscp就不会出现这个问题. 安装好后配置连接:(Centos7) 打开虚拟机,找到 ...
- CSS学习笔记_day7
目录 1.径向渐变 2. 线性渐变 3. 背景图片裁剪 4. 背景图片大小 5. 边框图片 6. 边框圆角 7. 边框阴影 8.位移 9. 倾斜 10. 旋转 11. 缩放 12. 文本换行 13. ...
- c++中函数的内存注意项
函数不能返回指向栈内存的指针!因为返回的都是值拷贝! char *str = "abcd"这样就是字符串常量,这种能返回,而char str[] = "abcd" ...
- 部署springboot工程到linux上及遇到的坑
一.步骤 1.将工程打成jar包 IDEA中点击file-project structure,如下图: 选择Artifacts-JAR-From modules,选择入口类Main Class,如下图 ...
- The listener supports no services
问题描述 sql> lsnrctl start 提示: The listener supports no services The command completed successfully ...
- PyQt5 教程地址
https://maicss.gitbooks.io/pyqt5/content/介绍.htmlPyQt5{ QtCore { BasicTimer#定时器 } QtWidgets#窗口工具 { QA ...
- 学习笔记CB012: LSTM 简单实现、完整实现、torch、小说训练word2vec lstm机器人
真正掌握一种算法,最实际的方法,完全手写出来. LSTM(Long Short Tem Memory)特殊递归神经网络,神经元保存历史记忆,解决自然语言处理统计方法只能考虑最近n个词语而忽略更久前词语 ...