sql server如何输出排序序号_Group by中子查询order by排序失效问题分析

8ce49735a14e515edd5dc5b4f4cd7b3f.png
通过sql分组查询数据时,一般通过group by来完成,group by默认取相同的分组列(一列或者多列)中第一个数据。

如果想获取sql分组中id最大的记录,我们可能想到的sql如下(name列作为分组):

select id,name from (select id,name from tt order by id desc) as t group by name

不过执行该sql发现并不能达到我们的目的,输出数据如下:

// 表数据如下:
id,name
1,name1
2,name1
3,name2
4,name2select id,name from (select id,name from tt order by id desc) as t group by name
// 输出结果如下:
id,name
1,name1
3,name2

这是为什么呢?因为mysql 5.6之后版本对排序的sql解析做了优化,子查询中的排序是会被忽略的,所以上面的order by id desc未起到作用。如果子语句中排序不做优化那不就可以了么,查阅资料发现可以在子语句中加上limit来避免这种优化(加上limit相当于临时表限定了取值范围不会进行优化,如果是全表的话就被优化掉了)。

// 加上limit
select id,name from (select id,name from tt order by id desc limit 1024) as t group by name// 输出结果如下:
id,name
2,name1
4,name

除了上述这种直接通过group by分组得到id最大记录之外,还可以通过分组获取到最大记录id,然后通过id获取对应记录(这里的id只要是记录的关键key即可)。

// 通过分组获取关键key,然后再获取对应记录
select id,name from tt where id in (select max(id) from tt group by name)// 输出结果如下:
id,name
2,name1
4,name2

其实除了group by获取分组最后一个记录之外,还可以通过关联子查询方式来实现:

select id,name from tt a where id = (select max(id) from tt where name = a.name) order by name// 输出结果如下
id,name
2,name1
4,name2

通过以上group by和关联子查询两种方式的实现,获取分组的最后一条记录要么直接通过分组直接来获取,要么先获取到记录关键key然后通过关键key获取对应的记录即可。

推荐阅读

Transmittable-Thread-Local:阿里开源的线程间上下文传递解决方案​mp.weixin.qq.com
77ae500dc9ec2706f8c9f80b723380e7.png
线程池如何传递线程上下文信息​mp.weixin.qq.com
55f2b636feebb857cd22ceffa33982e2.png
一起聊聊3个线程依次打印1、2、3...的故事​mp.weixin.qq.com
efb74a74f004651b623f38509799240d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入学习Redis(1):Redis内存模型

前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合&…

对话“互联网先驱”:星际互联网究竟可不可行?

Vinton Cerf曾在四十年前协助创造了互联网,如今他仍在努力帮助世界各地的人们建立联系。来源丨Quantamagazine作者丨Susan DAgostino编译丨科技行者Vinton Cerf,互联网之父之一,正在建立行星际互联网方面发挥着关键作用。太空探索困难重重&am…

烽火服务器怎么进入bios系统,装机高手告诉你如何进入bios

如何进入bios是很多装机技术人员才会研讨的问题,可是我们生活中依然有时分需求用到bios设置,这时分我们应该如何进入bios呢?说实话不同的电脑、型号都有不同的进入bios方法,但是关于主流的系统品牌来说,如何进入bios的方法大多都…

折弯弹性计算公式_冲压模具:影响回弹因素、回弹计算公式计算,值得收藏

回弹,设计师都会遇到,而且无法避免,只能想办法补偿或者降低影响。那什么是回弹呢?金属材料在塑性弯曲时总是伴随著弹性变形,因此当弯矩去掉之后,弯曲件的弯曲半径变得与模具尺寸不一致,这种现象…

image是否有disabled属性_Vue学习笔记 模板语法、计算属性

点击上方“蓝字”关注我们吧&#xff01;vue学习笔记官网&#xff1a;https://cn.vuejs.org/v2/guide/1、vue体验demo示例&#xff1a;image.png示例代码&#xff1a;<html lang"en"> <head> <meta charset"UTF-8" /> <meta n…

分析 | MEMS传感器市场报告

来源&#xff1a;核芯产业观察1、MEMS 发展迅速&#xff0c;Yole Development 预计 2023 年市场规模超 300 亿美元MEMS 全称为 Micro-Electro Mechanical System&#xff0c;即微机电系统&#xff0c;是集微型传感器、执行器、机械结构、电源能源、信号处理、控制电路、高性能电…

各大媒体优劣对比_信息流投放广告丨各大平台的信息流都有什么特点与弊端

相信很多企业都做过信息流的广告推广&#xff0c;那么各位广告主都做过哪些平台的信息流呢&#xff1f;今天我们来看一看各大平台的信息流都有什么特点与弊端吧&#xff01;1、社交类代表&#xff1a;微博粉丝通、广点通&#xff08;16年更名腾讯社交广告&#xff09;、陌陌、贴…

我们生活在一个虚拟世界的概率有多大?

© Thomas Leuthard - Flickr来源&#xff1a;人工智能AI技术利维坦按&#xff1a;我们在以前的文章中介绍过约翰惠勒提出的延迟实验&#xff1a;第一步&#xff1a;我们拿一块经过半镀银处理的反射镜BS1来代替双缝实验中的挡板。根据量子的分布随机性&#xff0c;从图示左…

mysql between and的用法的意思_从入门到入土:MySQL完整学习指南,包教包会!

一SQL 介绍SQL&#xff08;Structured Query Language&#xff09;,语义是结构化语言&#xff0c; 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统&#xff1b;二 数据库介绍2.1 数据库我们已经知道了SQL是操作数据库的语言&#xff0c;那么数据库是什么&a…

db2增加decimal类型字段小数位_05725.16.1Hive中decimal类型字段.0结尾数据显示异常问题处理...

作者&#xff1a;辉少1问题描述Fayson今天在Hive中插入字段类型为decimal的数据时发现&#xff0c;插入数据为1.0, 1.000等以 .0结尾的数据在hive中显示为1&#xff0c;即不显示末尾的.0 &#xff0c;如下&#xff1a;CREATE TABLE decimaltest (d decimal(18,7));INSERT INTO …

Nature:实验室培育的大脑可以拥有意识吗?

大数据文摘出品来源&#xff1a;nature编译&#xff1a;朱科锦、lin一直以来&#xff0c;对于科学家来说&#xff0c;人脑都是一个神奇的存在&#xff0c;关于人脑的研究也层出不穷。近几年&#xff0c;随着人工智能的发展&#xff0c;很多科学家都在努力探索&#xff0c;未来机…

c语言float转换为int_C语言的隐式类型转换和显示类型转换

C语言是一种强类型语言&#xff0c;当使用一种类型的对象代替另外一种类型的对象进行操作时&#xff0c;必须首先进行类型转换。类型转换的方式&#xff0c;一般可分为隐式类型转换和显示类型转换(也称为强制类型转换)。1、隐式类型转换隐式类型转换由编译器自动进行&#xff0…

asp 开发app_ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

由于ASP.NET Core应用是一个同时处理多个请求的服务器应用&#xff0c;所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止。出于安全方面的考量&#xff0c;为了避免敏感信息的外泄&#xff0c;客户端在默认的情况下并不会得到详细的出错信息&#xff0c;这无疑会在…

美国半导体十年计划中的NO.1,模拟硬件究竟有什么价值?

来源&#xff1a; 脑极体中国半导体行业在集体过冬&#xff0c;美国也未必没有紧迫感。前不久&#xff0c;美国半导体行业协会&#xff08;SIA&#xff09;和半导体研究公司&#xff08;SRC&#xff09;就联合发布了一份题为“半导体十年计划”的报告&#xff0c;希望美国政府能…

【编程开发】Python---列表

ERROR&#xff1a;错误 waring&#xff1a;警告&#xff0c;还没到犯错的地步 print(r\n) r"字符串"&#xff0c;字符串里的所有字符都不转义 str "abcdef" 如果想隔一个取出来&#xff0c;str[0::2] 深浅拷贝 列表的内存存放 Python修改的变量只是修改了…

processing python模式_详解python之多进程和进程池(Processing库)

环境:win7python2.7 一直想学习多进程或多线程,但之前只是单纯看一点基础知识还有简单的介绍,无法理解怎么去应用,直到前段时间看了github的一个爬虫项目涉及到多进程,多线程相关内容,一边看一边百度相关知识点,现在把一些相关知识点和一些应用写下来做个记录. 首先说下什么是进…

不确定性的价值

来源&#xff1a; 混沌巡洋舰推荐一篇万字长文 聪大脑的预测性编码讲起&#xff0c;区分三种不确定性&#xff0c;最终对我们如何应对这个充满不确定的时代&#xff0c;给出启示。愿读完后&#xff0c;你能够更全面客观的理解生活中的随机性。霍金斯是一位计算机科学家(后来成为…

网站开启https后很慢_网站优化中哪些设置会影响蜘蛛的抓取?对网站SEO产生什么影响...

网站在优化中&#xff0c;要有一定的收录基础才能有更大的几率提升排名&#xff0c;并获得搜索引擎的喜爱。但在网站优化中难免会有一些细节没注意到而影响蜘蛛的抓取&#xff0c;下面就带大家一起了解一下。一、登录设置有些网站会设置注册账号的要求才能允许用户浏览网站&…

正则表达式提取器_C++11新特性7 - 正则表达式

C11 新增了正则表达式的标准库支持&#xff0c;本文简介 C 正则表达式的使用在 C 中使用正则表达式&#xff0c;和其它语言差别不大int main() {regex e("abc*");bool m regex_search("abccc", e);// 输出 yescout << (m ? "yes" : &quo…

智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题

全文共计4384字&#xff0c;预计阅读时间9分钟来源 | 数据观&#xff08;转载请注明来源&#xff09;作者 | 陆宝华 李晋 张永红 李学良编辑 | 蒲蒲引言智慧城市已经热炒几年了&#xff0c;目前还在升温&#xff0c;并且一些做国际联网应用的大企业提出了“城市大脑”的概念。当…