mysql中group by和order by同时使用无效的替代方案
来源:互联网 发布:阿里云 wordpress 编辑:程序博客网 时间:2024/06/08 13:46
前言
最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by
和order by
引发的血案由此而生。在此做个记录,以备不时之需。
需求(得到所有barCode的最新的一条数据)
首先,看一下整体的表结构。
现在查找每个barCode
中最新的数据。
由于数据太多,不是很好看到效果。我们就拿一个barCode
为4565789
的数据做示例。
SELECT barCode, priCommodityID, createDateFROM tb_history_versionWHERE barCode = '4565789'ORDER BY createDate DESC;
试错
由于很久没有写过sql了。所以首先想到了用 group by和order by组合查询。
SELECT barCode, priCommodityID, createDateFROM tb_history_versionWHERE barCode = '4565789'GROUP BY barCodeORDER BY createDate DESC;
结果如下:
可以看到这并不是我们想要的结果,order by
没有任何效果。
接下来就试一下运用子查询的方式将两者结合。先排序再分组
SELECT *FROM ( SELECT barCode, priCommodityID, createDate FROM tb_history_version WHERE barCode = '4565789' ORDER BY createDate DESC ) AS AGROUP BY A.barCode;
结果还是令人失望的
解决
上面两种方式试过了,虽然结果让人伤心,但是工作还是要继续。于是就网上找各种资料,看能否用其他方式解决问题。偶然间看到了group_concat
可以实现分组排序,就拿来试一试
SELECT barCode, GROUP_CONCAT( priCommodityID ORDER BY createDate DESC ) AS priCommodityID, GROUP_CONCAT( createDate ORDER BY createDate DESC ) AS createDateFROM tb_history_versionWHERE barCode = '4565789';
结果如下
可以看到顺序没问题了,但是所有数据都被拼接在一起了。需要进一步做截取字符的处理
SELECT barCode, SUBSTRING_INDEX( group_concat( priCommodityID ORDER BY createDate DESC ), ',', 1 ) AS priCommodityID, SUBSTRING_INDEX( group_concat( createDate ORDER BY createDate DESC ), ',', 1 ) AS createDateFROM tb_history_versionWHERE barCode = '4565789'GROUP BY barCode;
ok!到这里就发现已经实现我们刚开始的需求了。
总结
group by
和order by
同时使用是没有效果的,可以使用group_concat
和groub by
替代。group_concat
内可以实现字段排序。
参考文章
http://www.cnblogs.com/jjcc/p/5896588.html
首发地址
http://www.devzxd.top/2017/05/27/mysql-groupby-orderby.html
阅读全文
1 0
- mysql中group by和order by同时使用无效的替代方案
- MySQL中group by和order by同时使用
- group by与order by同时使用
- group by与order by同时使用
- group by order by 同时使用
- 解决mysql group by和count同时使用的bug
- mysql的group by ,order by语句的使用
- Mysql中order by、group by、having的区别
- mysql 中order by 与group by的顺序
- mysql中order by与group by的顺序
- mysql中order by与group by的顺序
- oracle中group by 和order by 共同使用
- Mysql的distinct语句和group by,order by
- mysql的order by,group by和distinct优化
- mysql的order by,group by和distinct优化
- mysql group by、select和order by的特例
- mysql的order by,group by和distinct优化
- mysql的group by、order by和having、where比较
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
- C# 接口的隐式与显示实现
- 算法课十七周 Single Number
- 编译安装libfreenect2时错误问题
- 《HeadFirst设计模式》书摘-状态模式/代理模式
- mysql中group by和order by同时使用无效的替代方案
- Spring基础
- Android基础控件
- 根据数组下标删除数组中的元素
- JVM<对象的四种引用>
- python3 Scrapy简介
- 回顾java
- 百度地图及定位
- 来说说<Builder>创建模式