mysql中group by和order by同时使用无效的替代方案

前言

最近一年由于工作需要大部分使用的都是nosql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生。在此做个记录,以备不时之需。

需求

首先,看一下整体的表结构。
表结构
现在查找每个barCode中最新的数据。

由于数据太多,不是很好看到效果。我们就拿一个barCode为4565789的数据做示例。

SELECTbarCode,    priCommodityID,    createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC;

登录后复制

示例数据

试错

由于很久没有写过sql了。所以首先想到了用 group by和order by组合查询。

SELECTbarCode,    priCommodityID,    createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCodeORDER BYcreateDate DESC;

登录后复制

结果如下:
错误结果:1
可以看到这并不是我们想要的结果,order by没有任何效果。
接下来就试一下运用子查询的方式将两者结合。先排序再分组

SELECT*FROM(SELECTbarCode,            priCommodityID,            createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC) AS AGROUP BYA.barCode;

登录后复制

结果还是令人失望的
错误结果:2

解决

上面两种方式试过了,虽然结果让人伤心,但是工作还是要继续。于是就网上找各种资料,看能否用其他方式解决问题。偶然间看到了group_concat可以实现分组排序,就拿来试一试

SELECTbarCode,    GROUP_CONCAT(        priCommodityIDORDER BYcreateDate DESC) AS priCommodityID,    GROUP_CONCAT(        createDateORDER BYcreateDate DESC) AS createDateFROMtb_history_versionWHEREbarCode = '4565789';

登录后复制

结果如下
结果一
可以看到顺序没问题了,但是所有数据都被拼接在一起了。需要进一步做截取字符的处理

SELECTbarCode,    SUBSTRING_INDEX(        group_concat(            priCommodityIDORDER BYcreateDate DESC),',',1) AS priCommodityID,    SUBSTRING_INDEX(        group_concat(            createDateORDER BYcreateDate DESC),',',1) AS createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCode;

登录后复制

正确结果
ok!到这里就发现已经实现我们刚开始的需求了。

总结

group by和order by同时使用是没有效果的,可以使用group_concat和groub by替代。group_concat内可以实现字段排序。

参考文章

首发地址

http://www.devzxd.top/2017/05/27/mysql-groupby-orderby.html

以上就是mysql中group by和order by同时使用无效的替代方案的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1620014.html

(0)
上一篇 2025年2月19日 00:53:21
下一篇 2025年2月19日 00:53:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Vue 中如何进行递归组件的使用?

    vue 是当前最流行的前端框架之一,它的特点是简单易用,也非常灵活。在 vue 中,递归组件是一种非常有用的技术,它能够帮助我们在组件内部使用组件,并且避免了组件间传递数据的麻烦。 下面,我们就来详细了解一下 Vue 中如何进行递归组件的使…

    编程技术 2025年4月1日
    100
  • Vue 中的渲染函数是什么,如何使用?

    vue 中的渲染函数是什么,如何使用? Vue.js 是一个用于构建用户界面的渐进式框架,它的核心思想是组件化。Vue 提供了一种基于模板的声明式渲染机制来构建用户界面,但有时候我们需要更加灵活地构建界面,这时候就可以使用 Vue 的渲染函…

    编程技术 2025年4月1日
    100
  • Vue 全局API的使用与相关场景

    vue是一个流行的javascript框架,它提供了很多全局api来方便开发。在这篇文章中,我们将深入探讨vue全局api的使用和相关场景,以帮助您更好地使用vue构建应用程序。 一、Vue全局API概述 Vue提供了很多全局API来方便我…

    编程技术 2025年4月1日
    100
  • Vue 中的事件总线是什么,如何使用?

    vue 是一款非常流行的 javascript 框架,它以响应式的数据绑定和组件化的思想,帮助我们构建复杂的交互界面。在 vue 中,我们经常需要在组件之间传递数据和触发事件,而事件总线就是一种很好用的解决方案。 一、什么是事件总线? 事件…

    编程技术 2025年4月1日
    100
  • Photoshop 3d水滴入门教程

    最终效果 1、新建一个大小适当的文件,然后用钢笔工具勾出基本图形,转为选区后填充颜色:#de094c。 2、使用加深工具加深边缘,绘制出立体效果。 3、使用减淡工具在图形中间反复涂抹,增强立体感,同时绘制出高光。

    2025年4月1日 编程技术
    100
  • Photoshop自由变换工具制作分形图形教程

      分形是一种具有自相似特性的现象、图象或者物理过程。每一组成部分都在特征上和整体相似,只仅仅是变小了一些而已。在海报设计和插画领域都有很多分形图形的应用,时常都会产生令人惊艳的效果。大部分人会用计算软件作出这些具有自相似性的逐渐缩小的图形…

    2025年4月1日
    100
  • Photoshop优化模糊照片的四种实用方法

      本文介绍用photoshop优化模糊照片的几种非常实用的方法。   祁老师:菜菜,今天怎么一脸郁闷的样子?  菜菜:我最近出游拍的好多照片的表情和姿态都不错,可就是由于光线和对焦不是很好,照片有点模糊,真是太可惜了。  祁老师:是吗,让…

    2025年4月1日
    100
  • Photoshop置换滤镜做2008奥运旗

      之前我们使用Photoshop制作简单动画,主要是借助捆绑的ImageReady进行动画制作。Photoshop CS3 Extended版本就具备动画制作功能,对phtotoshop制作动画的理论和技巧进行学习,下面给大家介绍的是PS…

    2025年4月1日 编程技术
    100
  • Photoshop入门:外部图案的安装和使用

     上一篇Photoshop教程讲述了Photoshop入门:外部渐变的安装和使用,本节讲述外部图案的安装和使用。1,首先打开photoshop,选择菜单 : 编辑 > 预设管理器如图1 2.在预设类型中选择图案,然后再选栽入按钮 3.…

    2025年4月1日 编程技术
    100
  • Photoshop入门:网上下载的滤镜应用实例

    前面讲述了Photoshop入门:动作的安装使用实例,继续讲解网上下载的一些滤镜如何应用呢? 相关教程:Photoshop入门:外挂滤镜的安装和使用。1,首先找到需要安装的滤镜文件(就是自己下载的滤镜文件)然后选取复制。本文使用的是正弦滤镜…

    2025年4月1日 编程技术
    100

发表回复

登录后才能评论