热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对mysql的小小吐槽

mysql其实挺好的,大一就开始学,这么多年也还不错,基本上使用数据库一直都是使用的mysql,但是随着使用越来越多

mysql其实挺好的,大一就开始学,这么多年也还不错,基本上使用数据库一直都是使用的mysql,但是随着使用越来越多,mysql的弊端就开始逐渐显现了。

今天发现,mysql的max()和group by在联合使用的时候,无法查出max()对应的其他列数据,或者说,这些数据都是group by后分组的第一条数据,这真的是麻烦。我能想到的最笨的办法是连一下自己,但是,因为这只是一条子语句,外部还要连表,因此我当即否定了这种想法,认为一定会有更好的解决办法,好吧,呵呵。

之前的vultr账号因为ipv6的原因上不去了,目前只能用百度,百度了这个问题,大部分都是复制的同一个人的答案,不知道这些人怎么想的,转载就转载吧,铺天盖地说自己是原创,得出的解决方案无一例外全是连表。

不敢相信,怎么会这样?肯定有更好的解决办法的,于是我花了一个多小时不断地上网找,自己测试,最终屈服了,mysql的max()方法应该多加参数的,这个参数代表同时查询max()对应的其他列,这样岂不是好多了,为什么要连表?

最终用连表写出来,执行时间接近3秒,好吧,我有空再试试,以下是两种效率极低的解决办法:

select * from (SELECT ANY_VALUE(A.num) num,ANY_VALUE(A.close) ma,ANY_VALUE(A.data) ma_time FROM `fa_pvg` A,
(SELECT ANY_VALUE(num) num,MAX(close) max_day FROM `fa_pvg` where data BETWEEN 20180625  AND  20180705 GROUP BY num) B
WHERE A.num = B.num AND A.close = B.max_day GROUP BY A.num)a left join (SELECT ANY_VALUE(A.num) num,ANY_VALUE(A.close) mi,ANY_VALUE(A.data) mi_time FROM `fa_pvg` A,
(SELECT ANY_VALUE(num) num,MIN(close) max_day FROM `fa_pvg` where data BETWEEN 20180625  AND  20180705 GROUP BY num) B
WHERE A.num = B.num AND A.close = B.max_day GROUP BY A.num)b ON a.num=b.num

select num,close,data from fa_pvg where concat(num,close) in (select concat(num,max(close)) from fa_pvg t1  where data BETWEEN 20180625  AND  20180705  group by t1.num ) 


推荐阅读
author-avatar
真实的独孤一剑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有