MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
来源:互联网 发布:电脑装linux系统 编辑:程序博客网 时间:2024/05/21 17:11
转:https://my.oschina.net/hanzhankang/blog/210623
问题是:
数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段,
现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记录,
如果最大点击量有两个相同的只要一条。
经过N次搜索,N次检测网上的解决SQL语句,终于找到个优雅的而且结果正确的SQL,这个是一个博客作者在Mysql的官方文档里面发现的。
禁不住收藏了,以备后用。
特别注意:
这个语句在SQLite上测试正常,速度很快。但是在我机器上的MySql5.0上执行后就死机了,其他版本的Mysql不知道什么情况。
上面的语句还不能满足我的第二个要求就是:如果某类别中最大点击量有两个相同的记录,只要一条。
下面是我附加的解决办法:
筛选,保证每个类别只有一条,(kind,id改为所有列,结果就是对应的记录了)
后续:
结合以往的Mysql使用经验发现Mysql的一个最大问题就是在一个查询的where子句中如果包含对前面select的表的查询那么CPU占用就会飙升Mysql服务停止。可以说是自连接查询问题,不知道这是不是个bug,5.0,5.1版本都有这个问题,回头看看上面的SQL语句正好符合了这个问题,解决办法就是把子查询的表弄成一个临时表或者视图总之不能和前面的select的表是同一个表,那么问题就解决了,于是乎,对上面的SQL稍作修改就可以在Mysql上跑了。
修改过程:
1.建立一个视图max_click,存储的是每个类别最大的点击量
2 .筛选,保证每个类别只有一条记录运行正常,速度0.78秒。(表中一共23000条数据) Okay! 大功告成!
最前面第一个SQL在MSSQL上运行不知道行不行,我想在SQLite能正常在MSSQL上应该没问题,看来Mysql需要改进的地方很多啊,同样是开源的SQLite就可以做到的,而且SQLite那么轻量级就几百KB,Mysql更应该能做到。
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中最大值对应的值
- mysql查询最大值max()对应的记录值。
- SQL查询Max()最大值对应的记录
- MySQL中Max+Group BY查询最大值记录无效
- MySQL-----MySQL中max函数查询最大值问题
- mysql如何查询一个表中所有字段的名字
- 在一张表中,查询出一个字段相同,一个字段不同的记录
- mysql 查询表中字段
- SQL语句:查询一个表中某个字段与其他记录不同的记录
- mysql中查询一个字段在哪几张表中
- sqlserver 查询数据表中每个类别最新的一条记录
- Medoo Max的使用:取出被查询字段中的最大值
- linux内核启动过程分析
- 自定义vue全局组件use的使用
- Window 安装两个版本JDK,配置其中一个
- 控制服务器处理请求的数量(高并发)-防止用户重复点击导致多次请求
- android 使用Robotium自动化测试
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- java集合分析(7):ArrayList
- 随记
- 安卓开发中Banner添加头布局结合PullToRefresh实现上拉下拉
- wk2168驱动调试(二)
- android 应用覆盖安装显示程序未安装
- 如何按行政区划下载谷歌卫星地图并裁剪
- 条款10:令operator=返回一个reference to *this
- 教程篇(5.4) NSE4 10. Web 过滤 ❀ 飞塔 (Fortinet) 网络安全专家