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的区 ...
随机推荐
- python爬虫,使用urllib2库报错
urllib2发生报错URLError: <urlopen error [Errno 10061]:首先检查网址是否正确其次如果报这种错误,是因为ie里设置了代理,取消即可, 步骤: 打开IE浏 ...
- MySQL 报错 1093
[Err] 1093 - You can't specify target table 'user' for update in FROM clause 报错的sql如下: delete from ` ...
- JVM 性能调优 -Xmx、-Xms、-Xss
1. -Xmx 设置应用程序(不是JVM)内存可用大小 ( 如果程序要花很大内存的话,可以修改缺省配置,但是不能超过机器的内存),即最大可用Heap的大小. 2. -Xms 设置初始Heap的大小 ...
- springcould 微服务 搭建
摘自:https://www.cnblogs.com/lori/p/10615654.html (完整) springcloud~服务注册与发现Eureka的使用 服务注册与发现是微服务里的 ...
- vue学习之路一:安装vue-element-admin项目
今天看到一个vue网站,觉得很好,立马又有学习vue的冲动了,话不多说,直接贴项目网址: https://github.com/PanJiaChen/vue-element-admin/blob/ma ...
- c# 获取某进程占用的内存(任务管理器显示的内存一致)
最近写了看门狗的winform程序,需求要求显示监测的进程所占的内存大小 找了好几个方法,都和任务管理器显示的内存不一致 最后找到了一个解决方法 PerformanceCounter pf1 = ne ...
- HTTPS协议学习
http的缺点:(其他一些未加密的协议中也存在) 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 TCP/IP是可能被窃听的 ...
- linux 在后台常驻运行php脚本
php a.php &
- DEBUG经历
在两年有余的学习生活中,我不仅在课堂上学到了很多东西,我也在一次次的错误中得到了宝贵的经验和教训.Bug和debug,构成了我生活中不可或缺的一部分. 我在编程中犯过的错误很多,无法一一阐述,再次说一 ...
- 多管齐下显神威-2017逐浪CMS开启全新建站与WEB技术革命
培训班里说百遍,不如商业场景来检验. PS.AI.JS工具齐上阵,一统逐浪CMS全网中间件. 从逐浪软件创业团队成立.到逐浪CMS产品,以企业形式运营,历经十二载风雨,作为华文世界排名第一的dotNE ...