Mysql 中子查询时order by与group by合用无效的解决办法

news/2025/3/19 3:30:02/

存在一个需求:
需要获取某些条件下,在分组后,取最新的记录。

比如有张学生分数表,里面包含了学生一年的所有考试的语数外成绩,我想要获取同学A的最后一次考试成绩。

select * from (
select * from student_score where student_name ='A' order by id desc
) as A group by student_score;

思路问题不大
先筛选出同学A的成绩,按照id排序【默认id自增,最新一次考试的id是最大的】,然后将该查询结果作为子表,对分数进行分组。可是执行后发现,展示的结果好像并没有order by,也就是说子查询的order by失效了,解决办法

官方手册给出:

It must not have ORDER BY with LIMIT.

他们说order by 如果没有加limit 就会失效
加上limit:

select * from (
select * from student_score where student_name ='A' order by id desc limit 3
) as A group by student_score;

这里的limit 3 ,3代表的是语数外三门,可以大于3,不能够小于3


http://www.ppmy.cn/news/1291599.html

相关文章

字符串匹配

KMP算法 因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP 写过KMP,一定都写过next数组,next数组就是一个前缀表,前缀表是用来回退的,它记录了模式串…

OSCHINA Gitee 联合呈现,《2023 中国开源开发者报告》正式发布,总结分非常帮,可以免费看的报告!

《2023 中国开源开发者报告》 详细地址: https://talk.gitee.com/report/china-open-source-2023-annual-report.pdf 不需要收费下载!! 其中大模型的部分总结的非常棒 gietee 也支持 AI 模型托管了 如何在 Gitee 上托管 AI 模型 https://…

C++第四天

定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…

StringBad ditto (motto)

第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…

Nacos学习思维导图

一、服务注册 参考文档:http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 二、服务续约 参考文档:http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 三、服务…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— DevEco Studio下载与安装

一、下载DevEco Studio IDE开发工具 1. 登录鸿蒙官网 网址为: ​​​​​​​华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 页面如下: 2. 搜索“DevEco Studio IDE” 点击右上角的“请输入关键词”,在其中搜索“DevEc…

【CISSP学习笔记】6. 安全开发

该知识领域涉及如下考点,具体内容分布于如下各个子章节: 理解安全并将其融入软件开发生命周期 (SDLC) 中在软件开发环境中识别和应用安全控制评估软件安全的有效性评估获得软件对安全的影响定义并应用安全编码准则和标准 6.1. 系统开发控制 6.1.1. 软…

ubuntu开放防火墙端口

ubuntu开放防火墙端口 在Ubuntu中,你可以使用ufw命令来开放端口。下面是一些常用的命令示例: 开放单个端口: bash sudo ufw allow 将替换为你要开放的端口号。例如,要开放SSH(端口22),可以运行…