首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通俗易懂学会:SQL窗口函数

在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N员工进行奖励 面对这类需求,就需要使用sql高级功能窗口函数了。...通过下图,我们就可以理解partiition by(分组)和order by(在组内排序)作用了。 窗口函数具备了我们之前学过group by子句分组功能order by子句排序功能。...相信通过这个例子,已经明白了这个窗口函数使用: select *, rank() over (partition by 班级 order by 成绩 desc...它们区别举个例子,你们一下就能看懂: select *, rank() over (order by 成绩 desc) as ranking, dense_rank() over (order...) as current_max, min(成绩) over (order by 学号) as current_min from 班级表 得到结果: 有发现什么

18610

图解SQL面试题:经典topN问题

工作中会经常遇到这样业务问题: 如果找到每个类别下用户点击最多5个商品是什么? 这类问题其实就是常见:每组最大N条记录(topN)。 【题目】 现有“成绩表”,记录了每个学生各科成绩。...表内容如下: 问题:查找每个学生成绩最高2个科目 【解题思路】 1.看到问题中要查“每个”学生最高成绩。还记得我们之前课程里讲过?当有“每个”出现时候,就要想到是要分组了。...3.现在分组后,需要排序,又不减少原表行数,这种功能自然想到是窗口函数。 4.使用哪个专用窗口函数?...为了不受并列成绩影响,使用row_number专用窗口函数: row_number函数:也就是不考虑并列名次情况。比如前3名是并列名次,排名是正常1,2,3,4。...order by 成绩 desc) as ranking from 成绩表 where ranking <=2 很多同学都会用这样思路解题,但是这样写,sql会报错,为什么呢?

23210
您找到你想要的搜索结果了吗?
是的
没有找到

神奇 SQL ,高级处理之 Window Functions → 打破我们局限!

开心一刻   今天儿子跟老婆聊天   儿子:妈妈,为什么没有两个爸爸呀   老婆:每个人都只有一个爸爸呀,看谁有两个爸爸了   儿子一脸真诚看着老婆:那你为什么就有两个爸爸呢   老婆一脸疑惑望向儿子...儿子有点不服气,温柔地说道:管爷爷叫爸爸,管姥爷还叫爸爸,这不就是两个爸爸   老婆轻声解释道:虽然管他们两个都叫爸爸,但是姥爷才是爸爸,爷爷是爸爸爸爸,是公公,明白了吗   儿子两眼朝天上看了下...,若有所思道:公公不是太监   老婆惊讶道:什么太监呀,公公和你说公公不是一回事,这一天天脑子里都想什么呢   儿子生气道:不用解释了,待会就告诉奶奶,说爷爷是太监 什么是窗口函数...: SELECT * FROM tbl_ware ORDER BY sale_unit_price DESC;   用 RANK 也实现: SELECT *, RANK() OVER(ORDER BY...窗口函数适用范围   通过上述几个案例,相信大家对这个问题已经有了一个大致答案 窗口函数 只能在 SELECT 子句中使用,不能在 WHERE 子句或者 GROUP BY 子句中使用,为什么

16010

MySQL查询优化(二)

where条件后字段上增加索引来提高查询效率,在使用where同时想小伙伴们order by用也不少吧。...如果order by用多了想ground by也会用到。但是方式对? 语句分析 一.order by 对于order by大家都不陌生,但是为什么使用order by之后查询会变慢呢?...首先我们仍然是要加索引,但是加了索引就会生效? 第一种,sort加了索引,但是觉得索引生效了吗?...我们还要注意一点就是where条件后面不能使用or去连接条件,不然同样会进行排序 下面是在网上找到一个order by字段索引失效情况。...,以空间换时间 需要这样做会增加开发工作量和维护量,但是如果换来可观性能提升,这样做也是值得. ---- 今天小程序更新题库: 1.触发器作用?

1.7K20

《深入浅出SQL》问答录

如果只有一张白表,为什么还要创建数据库? A:SQL语言要求所有的表都放在数据库中,这当然有它理由。...SQL控制多位用户同时访问表行为,能够授予或撤销对整个数据库访问权,这有时比控制每张表权限要简单多。 发现CREATE DATABASE 命令字母全是大写,一定要这样?...所有名称都不能包含空格,所以使用下划线能够让创建更具描述性名称。 命名时最好避免首字母大写,因为SQL不区分大小写,极可能会搞错数据库。 为什么不能直接把BLOB当成所有文本值类型?...像ALTER TABLE MODIFY COLUMN proj_desc AFTER con_name;这样做可以? 创建表后就无法真正改变列顺序了。...如果我们试着删除主键表中行或者是改变主键值,而这个主键是其他表外键约束时,就会收到错误警告。 所以上面说那种,不能删除了是? A:还是可以,先移除外键行即可。

2.9K50

年底了,别问程序员这些问题,小心被打。

2、客户明天就要这个功能,改不完不付尾款。 3、客户说就调整下页面,这么简单,半天就做完了吧? 4、有同事离职了,要不来接一下这块? 5、在客户现场演示时候又报错了,你们都是废物?...为什么做不出来? 2、凌晨上完线别给我打电话,要睡觉,你们反正也不睡觉,顺带给验证下业务吧。 3、洗发水给你们用就是浪费,用肥皂洗洗得了。 4、周末我们出去玩,?哦,你们要加班,算了。...7、拿着那么高工资,加班不是很正常? | HR常说的话: 1、年轻人要多吃苦,能者多劳,多劳多得呀。 2、天天愁眉苦脸,来,给姑奶奶笑一个。 3、电脑坏了,来给我修一下。不会?...不是搞电脑? 4、老公找不着了,帮我定位下? 5、玩玩电脑,就拿我们几倍工资,你们还抱怨个屁啊!...| 老板常说的话: 1、知道你们很重要,但不能告诉我你们每天究竟在干啥? 2、为什么又要招人?招一个运维能给业务增长带来帮助? 3、DevOps是啥意思?中间件是啥意思?

55330

Java序列化与反序列化

前言 Java序列化与反序列化是Java中比较重要一个知识,本文将总结一下,怎么使用序列化功能以及经常遇到一些问题解答....序列化和反序列化匹配是怎么匹配?总不能随便来吧,A类序列化后二进制文件,B类能从哪里读出一个对象来嘛? 不能,类路径以及功能代码必须完全相同,而序列化ID也是用来补充这一判断....试想一下,在服务里new了一个对象,并将其序列化使用网络传输,那么收到这个二进制流的人都能序列化?...静态变量序列化 在上面的代码中,定义了一个静态变量,他也被序列化? 在序列化之后,对静态变量重新赋值,那么两次打印值相等? 打印结果是: 10 250 为什么呢?...序列化一个ArrayList,不给我存储内部值?要你个空壳子干啥!摔! 稳住,我们可以实际测试一下,会发现在序列化及反序列化过程中,是保留了list中.

59220

千万级数据表选错索引导致线上慢查询事故

又两周过去了,云笔记里又多了几篇写了一半文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周产出五六篇文章,给我两个肝都不够。...试想一个月黑风高夜晚,公司线上突然挂了,而你同事们都不在线,就一个人有条件解决问题,这时候如果被工程师基本功把卡住了,就问你尴不尴尬......看图表慢查询在高峰达到了每分钟14w次,在平时正常情况下慢查询数仅在两位数以下,如下图: 赶紧查看慢SQL记录,发现都是同一类语句导致慢查询(隐私数据例如表名,已经隐去): select * from...「可以看到是有idx_city_id_type和idx_1索引」,我们查询条件是city_id和type,这两个索引都是走到。 但是,我们查询条件真的只要考虑city_id和type?...索引要考虑 order by 字段 为什么这么说?因为如果这个表中索引是city_id,type和id联合索引,那优化器就会走这个联合索引,因为索引已经做好了排序。

1.4K30

MySQL选错索引导致线上慢查询事故复盘

又两周过去了,云笔记里又多了几篇写了一半文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周产出五六篇文章,给我两个肝都不够。...试想一个月黑风高夜晚,公司线上突然挂了,而你同事们都不在线,就一个人有条件解决问题,这时候如果被工程师基本功把卡住了,就问你尴不尴尬… 本文主要内容: 故障描述 问题原因排查 MySQL索引选择原理...可以看到是有idx_city_id_type和idx_1索引,我们查询条件是city_id和type,这两个索引都是走到。 但是,我们查询条件真的只要考虑city_id和type?...这里,给你简单介绍一下MySQL采样统计方法。 为什么要采样统计呢?因为把整张表取出来一行行统计,虽然可以得到精确结果,但是代价太高了,所以只能选择“采样统计”。...索引要考虑 order by 字段 为什么这么说?因为如果这个表中索引是city_id,type和id联合索引,那优化器就会走这个联合索引,因为索引已经做好了排序。

94340

MySQL 查询专题

ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]] ASC 是 ASCENDING 缩写,是默认行为。...而 DESC 是 DESCENDING 缩写。 可以使用任何字段来作为排序条件,从而返回排序后查询结果。 可以设定多个字段来排序。...可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。...下标从 0 开始,当根据不出现在 SELECT 清单中列进行排序时,不能采用这项技术 如果想在多个列上进行降序排序,必须对每一列指定 DESC 关键字。...对于要增加每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么正常大量时间,并且极大地提高了查询一开始就正常工作可能性。

5K30

MySQL选错索引导致线上慢查询事故

又两周过去了,云笔记里又多了几篇写了一半文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周产出五六篇文章,给我两个肝都不够。...可以看到是有idx_city_id_type和idx_1索引,我们查询条件是city_id和type,这两个索引都是走到。 但是,我们查询条件真的只要考虑city_id和type?...] 引用参考文献一段解释: 首先要知道,选择索引是MySQL优化器工作。...这里,给你简单介绍一下MySQL采样统计方法。 为什么要采样统计呢?因为把整张表取出来一行行统计,虽然可以得到精确结果,但是代价太高了,所以只能选择“采样统计”。...索引要考虑 order by 字段 为什么这么说?因为如果这个表中索引是city_id,type和id联合索引,那优化器就会走这个联合索引,因为索引已经做好了排序。

2.1K00

SQL优化万公式:5 大步骤 + 10 个案例

前言 在应用开发早期,数据量少,开发人员开发功能时更重视功能实现,随着生产数据增长,很多SQL语句开始暴露出性能问题,对生产影响也越来越大,有时可能这些有问题SQL就是整个系统性能瓶颈。...范围查询还有“IN、between” 案例6、不等于、不包含不能用到索引快速搜索。...案例9、asc和desc混用 select * from _t where a=1 order by b desc, c asc desc 和asc混用时会导致索引失效 案例10、大数据 对于推送业务数据存储...另外,如果最近想跳槽的话,年前花了2周时间收集了一波大厂面经,节后准备跳槽可以点击这里领取! 推荐阅读 在外企工作真的爽? 在制造业大厂当程序员是什么感受? 怎么选?...如果看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,一定比现在更好!如果还没什么方向,可以先关注,这里会经常分享一些前沿资讯,帮你积累弯道超车资本。

28330

面试官:聊聊索引失效10种场景,回答一半就算过

准备工作 所谓空口无凭,如果直接把索引失效这些场景丢出来,可能没有任何说服力。 所以,决定建表和造数据,给大家一步步演示效果,尽量做到有理有据。...当然,如果你想更深入了解explain关键字用法,可以看看我另一篇文章《explain | 索引优化这把绝世好剑,真的会用?》,里面更为详细介绍。 2....那么,知道为什么?...因为少写了引号,这种小小失误,竟然让code字段上索引失效了。 这时心里可能有一万个为什么,其中有一个肯定是:为什么索引会失效呢?...可能一脸懵逼,为什么做了什么? 答:因为最后加address字段没有加索引,从而导致其他字段索引都失效了。

80620

2021年,SQL注入死透了么?

后来fastjson刷新了认知,这个框架也算是对互联网安全概念一种推动。连不懂技术老板,都知道fastjson快要命,作为程序员安全理念就得到了一次提升。 为什么对sql注入情有独钟?...如果用了Java界MyBatis或者JPA,发生SQL注入可能性就变非常低。现在PHP也有了类似于thinkphp一样框架,代表着SQL注入漏洞已经越来越少了。...,有些场景,并不能使用预编译方式(或者仅仅是不知道或者懒)。...但是工期压死人,在不知不觉间,大多数人就选择了简单写法。毕竟功能第一嘛,也是体现工作最主要方式。...不就一个ASC和DESC了,给我传一个长长串,是怎么回事? 总结 SQL注入在2021年,依然存在,只不过门槛提高了。现在SQL注入减少,都是框架功劳,和程序员水平没半毛关系。

96820

MySQL百万级数据量分页查询方法及其优化

最好ORDER BY后列对象是主键或唯一所以,使得ORDERBY操作利用索引被消除但结果集是稳定(稳定含义,参见方法1) 原因: 索引扫描,速度会很快....<= t2.id ORDER BY t1.id desc LIMIT $pagesize; mysql大数据量使用limit分页,随着页码增大,查询效率越低下。...一点小小失误,可能造成整个系统改写,甚至更本系统无法正常运行!好了,不那么多废话了。...难道MySQL 无法突破100万限制???到了100万分页就真的到了极限? 答案是: NO 为什么突破不了100万是因为不会设计mysql造成。下面介绍非分表法,来个疯狂测试!...好了,我们测试又回到 collect表,开始测试结论是: 30万数据,用分表法可行,超过30万他速度会慢道无法忍受!当然如果用分表+这种方法,那是绝对完美的。

3.8K10

低级程序员和高级程序员区别

低级程序员和高级程序员区别   低级程序员认为自己与高级程序员区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug....(); }else{ order.cancel(); }   看到没错, 这段代码逻辑清晰, 一般 90% 情况都能正常工作, 有的甚至达到 99%, 在某些特定时间段, 这样系统...100% 正常工作(几乎是完美的系统).   ...这种低级程序员, 不仅在于他们写出了逻辑上不完备系统, 而且还恶劣地引经据典来做错误辩护. 但他们引用经典是不合时宜(不能支撑他们结论).   ...但上面的代码在逻辑上还不是 100% 准确, 例如, 如果对方系统误报呢? 但其它异常情况可以根据实际情况来忽略. 如果发现这段代码还有重要逻辑上缺陷, 欢迎告诉我.

770100

敏捷团队需要考虑六个行为

给我举一个必须和其他人一起工作以确保完成某事例子。发生了什么事?” 2、寻求帮助的人 对我们许多人来说,寻求帮助并不容易。在许多组织中,寻求帮助甚至是不正确。...可以问一系列问题之一是:“告诉我喜欢怎样工作。”回想一下做过最后一个功能。在你要求反馈之前,有没有试着把事情做完?”等待答案。现在,问,“为什么?”...我们希望人们即使在不完善条件下也完成这项工作会知道如果有这样适应性强的人,会得到以下答案:“告诉我一个没有喜欢项目条件时候。”做了什么?”...要了解更多关于这种能力信息,可以这样问:“告诉我工作中帮助团队时间。”那是什么?” 一个候选人可能无法回答这个问题。...例如,在以下方面取得了一些成功:“告诉我做了一件认为不在你工作描述中事情。”做了什么?”

33020

分享 | MySQL百万级数据分页查询及优化

最好ORDER BY后列对象是主键或唯一所以,使得ORDERBY操作利用索引被消除但结果集是稳定(稳定含义,参见方法1) 原因: 索引扫描,速度会很快....<= t2.id ORDER BY t1.id desc LIMIT $pagesize; mysql大数据量使用limit分页,随着页码增大,查询效率越低下。...一点小小失误,可能造成整个系统改写,甚至更本系统无法正常运行!好了,不那么多废话了。...难道MySQL 无法突破100万限制???到了100万分页就真的到了极限? 答案是: NO 为什么突破不了100万是因为不会设计mysql造成。下面介绍非分表法,来个疯狂测试!...好了,我们测试又回到 collect表,开始测试结论是: 30万数据,用分表法可行,超过30万他速度会慢道无法忍受!当然如果用分表+这种方法,那是绝对完美的。

2.2K41
领券