MySQL查询优化:取多列最大最小值的两种方法
创作时间:
作者:
@小白创作中心
MySQL查询优化:取多列最大最小值的两种方法
引用
CSDN
1.
https://blog.csdn.net/xjx891111/article/details/125217022
有个需求是这样的,每天有24个小时,对应24个列,要求:取一段时间内某个小时的最值,并按倒序排列。如下图所示:
首先假设 表名为t表,字段date,name,以及one、two、three。。。,代表每个小时,这里以3个列为例。
解决方法:
- 使用列转行,每一列都转为一行数据,这样,直接比值就可以了。
优点:比较常用,可以不用先求出每行或每列的最大值,转换后直接比值即可。
缺点:大量使用union,union越多,性能越差,在数据量大的情况下不推荐。
select name,max(val) from (
select name,one as val from t
union all
select name,two as val from t
union all
select name,three as val from t
) k group by name
order by val desc
limit 10
- 使用函数:greatest(求多列最大值),least (求多列最小值)
优点:可以一次性求出多列的最大值,性能也较高
select name, max(val) as vala from (
select name, greatest(one,two,three) as val from t
) k group by name
order by vala desc
limit 10
总结:
两种方式都可以完成任务,但是发现函数效率更好使,主要是两种方式使用场景不一样。行列转换在这种情况下就显得力不从心,所以,不同的场景要求推荐不同的写法。
本文原文来自CSDN
热门推荐
羽毛球拍漆面碰掉后如何修复?这种修复方式对拍子性能有何影响?
耳朵发痒、耳屎多?盲目采耳不可取,正确清洁耳道的方法看这里!
公版书侵权行为及其法律规制研究
唐朝姓氏的多样性:皇室之外的李氏族群
二战时,美国为什么对日本投放原子弹?其中一点跟苏联有关
啤酒风格分类:从传统到创新的多样选择
电脑重新分区怎么做?不同系统调整分区的方法
欧洲儿童青少年精神医学期刊:小学生发展性协调障碍的患病率及其相关因素研究
英雄联盟手游奥恩玩法攻略:对线团战思路详解
最罕见的性格,在程序员里却最常见?它就是。。
黏液纤维肉瘤可以治愈吗
疫情之下,你识别信息真伪的能力如何?
如何进行个人理财规划?个人理财规划对财务安全有何重要性?
散热风扇的设计与优化:从产品角度看如何提升性能与用户体验
文科理科500分谁更厉害差距大吗?文科理科分数一样哪个吃香
不锈钢菜板的骗局
从“观象授时”到“量子授时”,中国人与“时”俱进
普通高考限制次数吗?有几次报名机会?高考能连续考几年?
单硝酸异山梨酯片的作用机理是什么
从个体英雄到团队协作:1v6高HP系统,极限操作与团队智慧的终极考验!
男人30岁后的健康隐患,不只是“不行”
“总觉得儿子变丑了” 孩子腺样体肥大,一定要做手术吗?
老赖不还钱怎么办?这些证据和法律手段请收好
厂狱打法(太阴93w虚战力,只有李脉毕业)
口袋妖怪究极绿宝石Mega石分布位置一览:全超进化石分布汇总
控股公司与子公司的区别:解析企业组织结构的奥秘
怎么锻炼逻辑思维
中国5000年的历史朝代顺序及其时代特征
游戏币兑换零食违法吗?游戏实名制相关规定解析
重庆云龟山:17公里樱花漫道徒步攻略