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
热门推荐
李子柒:从人间仙境到真实生活
梁翘柏:《我是歌手》的音乐传承者
梁翘柏揭秘经典影视剧配乐幕后
《出走的决心》:一部关于女性自我解放的深刻对话
职场自救指南:遭遇“杠精”同事怎么办?
掼蛋新手入门指南:组牌技巧与策略详解
《教父》上映50周年:揭秘黑手党背后的美国梦
《教父》经典场景解析:迈克尔·柯里昂的崛起之路
农民社保购买指南:缴费标准、政策限制全解析
职场人必备:复方消化酶缓解胃胀
秋冬养生新宠:这些食物帮你告别胃胀
洪惠玲推荐:从病因到日常护理缓解胃胀
大年初三:这些禁忌你都知道吗?
正月初三的小年朝:传统习俗知多少?
正月初三,一场跨越千年的明朝灯会
马伊琍:从婚姻低谷到人生巅峰,一位独立女性的逆袭之路
马伊琍官宣新恋情:离婚五年后的幸福
荣放车主如何省下一杯奶茶钱?
《熊出没·狂野大陆》:一场充满想象力的科幻冒险
揭秘《熊出没·狂野大陆》:光头强变身背后的科技与艺术
春节带娃去北京:安全又好玩!
春节家庭游,市疾控中心教你如何保障旅途中的健康与安全!
春节档电影票房破19亿,带动地方经济复苏
春节档大片揭秘:《封神》与《哪吒》的历史人物新诠释
我国南北方喝酒的差异有哪些?
好莱坞的"叛逆之子"---马龙.白兰度
知柏地黄丸:缓解焦虑的传统良方
慢性肾炎患者必看:知柏地黄丸的使用指南
《医宗金鉴》经典方:知柏地黄丸的功效与应用
养老金差距下的老年生活:现状、影响与对策