mysql max() grou by 的使用小记
使用MAX 函数和 GROUP 的时候会有不可预料的数据被SELECT 出来。
下面举个简单的例子:
想知道每个SCOREID 的 数学成绩最高的分数。
表信息:
/*DDL Information For - test.lkscore*/
--------------------------------------Table Create Table
------- -----------------------------------------------------------------------------
lkscore CREATE TABLE `lkscore` ( `scoreid` int(11) DEFAULT NULL, `chinese` int(11) DEFAULT '0', `math` int(11) DEFAULT '0', KEY `fk_class` (`scoreid`), CONSTRAINT `fk_class` FOREIGN KEY (`scoreid`) REFERENCES `lkclass` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
select * from lkscore;
query result(12 record
scoreid | chinese | math |
1 | 90 | 80 |
2 | 100 | 99 |
3 | 29 | 98 |
4 | 87 | 79 |
5 | 89 | 99 |
1 | 49 | 98 |
3 | 98 | 56 |
2 | 76 | 88 |
2 | 80 | 90 |
3 | 90 | 70 |
1 | 90 | 90 |
1 | 67 | 90 |
错误的SELECT
select scoreid,chinese,max(math) max_math from lkscore group by scoreid;
query result(5 records)
scoreid | chinese | max_math |
1 | 90 | 98 |
2 | 100 | 99 |
3 | 29 | 98 |
4 | 87 | 79 |
5 | 89 | 99 |
上面的90明显不对。
方法一:提示:查了一下,mysql5.7之后对于这个顺序很像进行改变了,所以使用这个语句的时候要特别小心。这个是我执行语句之后的结果,我机子上的Mysql是5.7版本的,不适用。
select scoreid,chinese,math max_math from
(
select * from lkscore order by math desc
) T
group by scoreid;
query result(5 records)
scoreid | chinese | max_math |
1 | 49 | 98 |
2 | 100 | 99 |
3 | 29 | 98 |
4 | 87 | 79 |
5 | 89 | 99 |
方法二:
select * from lkscore a where a.math = (select max(math) from lkscore where scoreid = a.scoreid) order by scoreid asc;
query result(5 records)
scoreid | chinese | max_math |
1 | 49 | 98 |
2 | 100 | 99 |
3 | 29 | 98 |
4 | 87 | 79 |
5 | 89 | 99 |
这个也是用MAX函数,而且还用到了相关子查询。
我们来看一下这两个的效率如何:
|
query result(2 records)
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
1 | PRIMARY | <derived2> | ALL | (NULL) | (NULL) | (NULL) | (NULL) | 12 | Using temporary; Using filesort |
2 | DERIVED | lkscore | ALL | (NULL) | (NULL) | (NULL) | (NULL) | 12 | Using filesort |
很明显,有两个FULL TABLE SCAN。
|
query result(2 records)
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
1 | PRIMARY | a | index | (NULL) | fk_class | 5 | (NULL) | 12 | Using where |
2 | DEPENDENT SUBQUERY | lkscore | ref | fk_class | fk_class | 5 | a.scoreid | 1 | Using where |
第二个就用了KEY,子查询里只扫描了一跳记录。
很明显。在这种情况下第二个比第一个效率高点。
mysql max() grou by 的使用小记相关推荐
- MySQL max()函数
转载自 MySQL max()函数 MySQL MAX函数介绍 MySQL MAX()函数返回一组值中的最大值.MAX()函数在许多查询中非常方便,例如查找最大数量,最昂贵的产品以及客户的最大付款. ...
- mysql max和order by_mysql – 为什么MAX()比ORDER BY慢100倍… LIMIT 1?
我有一个表foo(在其他20个之中)列bar,baz和quux以及baz和quux上的索引.该表有~500k行. 为什么以下查询的速度差异如此之大?查询A需要0.3秒,而查询B需要28秒. 查询A. ...
- mysql max 命令大全_MySQL常用命令,34道练习题(持续更新中)。
1.使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE M ...
- mysql max嵌套select_使用嵌套select子式 解决mysql不能叠加使用如max(sum())的问题
网上也有解决方案 有的有瑕疵 有的较复杂(mysql没有分析函数,可以使用变量实现) select sumScoreValue,studentid,studentName from sc_studen ...
- mysql max where_MAX函数中的where子句mysql
您不能在同一查询的WHERE子句中引用聚合函数的结果(例如MAX()). 解决这种类型问题的规范模式是使用内联视图,如下所示: SELECT t.firstName , t.Lastname , t. ...
- mysql tracker_linux架设BT Tracker服务器小记
linux架设BT Tracker服务器小记 目前开源的Bt tracker项目有: 官方Tracker为 www.bittorrent.com/ 使用python语言 windows下的tracke ...
- mySQL MAX与sum 连用_mysql – 在sql脚本中一起使用sum和max
我已经更新了查询,但现在出现的错误是:SQL语法中有错误;检查与您的 MySQL服务器版本对应的手册,以便在'AS max_parameter_value附近使用正确的语法 来自第7行的tcs.par ...
- mysql max 获取另外值_来看看 MySQL 的这个 BUG,坑了多少人....
来源: cloud.tencent.com/developer/article/1367681 问题描述 近期,线上有个重要Mysql客户的表在从5.6升级到5.7后master上插入过程中出现&qu ...
- mysql max()函数和min函数
MAX()返回指定列的最大值.MAX要求指定列名. 对非数值数据使用MAX():虽然max()一般用来找出最大的数值或日期值,但mysql允许将它用来返回任意列中的最大值,包括返回文本列中的最大值.在 ...
- mysql max pool_asp.net连接mysql得到错误all pooled connections were in use and max pool size was reach...
asp.net连接mysql数据库时,得到以下错误信息 MySql.Data.MySqlClient.MySqlException (0×80004005): error connecting: Ti ...
最新文章
- Confluence 6 生产环境备份策略
- 基于深度学习的步态识别算法的MATLAB仿真
- 威驰fs高配和低配有什么区别_“电子手刹”和“机械手刹”的区别有多大?很多车主不清楚...
- 云南旅游市场整治呈压倒性态势 旅游人次及年收入双增长
- 8口poe交换机产品介绍
- echarts label加边框_echarts 添加自定义label标签
- Petuum - Careers
- 29.课时29.【Django模板】url标签使用详解(Av61533158,P29)
- (05)System Verilog 数组类型详解
- kill apache
- 蓝牙耳机连接电脑没有声音解决办法
- js设计模式之策略模式
- 计算机学院研发------考核之界面
- c语言等差数列试题及其答案,等差数列练习题
- ThuThesis模板中\footnote每页重新从2编号的问题解决
- 龙渊无限法则服务器,龙渊大陆无限法则
- pip设置默认为清华镜像
- #Python第三方模块学习笔记(四)——CSV模块功能及主要函数介绍
- 【思维论01】如何让自己像打王者荣耀一样发了疯、石乐志的学习?
- Rabbitmq 和erlang 安装成功但是网面访问不了
热门文章
- 我的回忆录:如何成为会写书的程序员?
- JavaWeb分页显示内容和数据库分页查询
- POJ 3764 The Xor-longest Path 题解
- (阿里云笔记)购置域名+云解析DNS域名
- 如何学习计算机思维,刘康平:为什么我们每个人都应该学习计算思维?
- 各国家分析之加拿大安道尔
- LOAP its implimenlation
- c语言程序设计判断是否是素数,C语言编程输入一个数判断是否为素数(质数)...
- “校内网”将不存在,“校内网”更名为“人人网”
- 2k21sports服务器暂时不可用,NBA2K20服务器不可用怎么解决 nba2k20进不去游戏解决办法...