xx-20xx年sql函数用法总结内容摘要:

实际上, row_number 函数生成序号的基本原理是先使用 over 子句中的排序语句对记录进行排序,然后按着这个顺序生成序号。 over子句中的 order by 子句与 SQL语句中的 order by 子句没有任何关系,这两处的 order by 可以完全不同,如下面的 SQL 语句所示: select row_number() over(order by field2 desc) as row_number,* from t_table order by field1 desc 上面的 SQL 语句的 查询结果如图 3 所示。 图 3 我们可以使用 row_number 函数来实现查询表中指定范围的记录,一般将其应用到 Web 应用程序的分页功能上。 下面的 SQL 语句可以查询 t_table 表中第 2 条和第 3 条记录: with t_rowtable as ( select row_number() over(order by field1) as row_number,* from t_table ) select * from t_rowtable where row_number1 and row_number 4 order by field1 上面的 SQL 语句的查询结果如图 4 所示。 图 4 上面的 SQL 语句使用了 CTE,关于 CTE 的介绍将读者参阅 《 SQL Server2020 杂谈( 1):使用公用表表达式( CTE)简化嵌套 SQL》。 另外要注意的是,如果将 row_number 函数用于分页处理, over 子句中的 order by 与排 序记录的order by 应相同,否则生成的序号可能不是有续的。 当然,不使用 row_number 函数也可以实现查询指定范围的记录,就是比较麻烦。 一般的方法是使用颠倒 Top 来实现,例如,查询 t_table 表中第 2 条和第 3 条记录,可以先查出前 3 条记录,然后将查询出来的这三条记录按倒序排序,再取前 2 条记录,最后再将查出来的这 2 条记录再按倒序排序,就是最终结果。 SQL 语句如下: select * from (select top 2 * from( select top 3 * from t_table order by field1) a order by field1 desc) b order by field1 图 5 上面的 SQL 语句查询出来的结果如图 5 所示。 这个查询结果除了没有序号列 row_number,其他的与图 4 所示的查询结果完全一样。 二、 rank rank 函数考虑到了 over 子句中排序字段值相同的情况,为了更容易说明问题,在 t_table 表中再加一条记录,如图 6 所示。 图 6 在图 6 所示的记录中后三条记录的 field1 字段值是相同的。 如果使用 rank 函数来生成序号,这 3条记录的序号是相同的,而第 4 条记录会根据当前的记录 数生成序号,后面的记录依此类推,也就是说,在这个例子中,第 4 条记录的序号是 4,而不是 2。 rank 函数的使用方法与 row_number 函数完全相 同,SQL 语句如下: select rank() over(order by field1),* from t_table order by field1 图 7 上面的 SQL 语句的查询结果如图 7 所示。 三、 dense_rank dense_rank 函数的功能与 rank 函数类似,只是在生成序号时是连续的,而 rank 函数生成的序号有可能不连续。 如上面的例子中如果使用 dense_rank 函数,第 4 条记录的序号应该是 2,而不是 4。 如下面的 SQL 语句所示: select dense_rank() over(order by field1),* from t_table order by field1 上面的 SQL 语句的查询结果如图 8 所示。 图 8 读者可以比较图 7 和图 8 所示的查询结果有什么不同 四、 ntile ntile 函数可以对序号进行分组处理。 这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存 放一定数量的记录。 ntile 函数为每条记 录生成的序号就是这条记录所有的数组元素的索引(从1 开始)。 也可以将每一个分配记录的数组元素称为 “桶 ”。 ntile 函数有一个参数,用来指定桶数。 下 面的 SQL 语句使用 ntile 函数对 t_table 表进行了装桶处理: select ntile(4) over(order by field1) as bucket,* from t_table 图 9 上面的 SQL 语句的查询结果如图 9 所示。 由于 t_table 表的记录总数是 6,而上面的 SQL 语句中的 ntile 函数指定了桶数为 4。 也许有的读者会问这么一个问题, SQL Server2020 怎么来决定某一桶应该放多少记录呢。 可能t_table 表中的记录数有些少,那么我们假设 t_table 表中有 59 条记录,而桶数是 5,那么每一桶应放多少记录呢。 实际上通过两个约定就可以产生一个算法来决定哪一个桶应放多少记录,这两个约定如下: 1. 编号小的桶放的记录不能小于编号大的桶。 也就是说,第 1 捅中的记录数只能大于等于第 2 桶及以后的各桶中的记录。 2. 所有桶中的记录要么都相同,要么从某一个记录较少的桶开始后面所有捅的记录数都与该桶的记录数相同。 也就是说,如果有个桶,前三桶的记录数都是 10,而第 4 捅的记录数是 6,那么第 5 桶和第 6 桶的记录数也必须是 6。 根据上面的两个约定,可以得出如下的算法: // mod 表示取余, div 表示取整 if(记录总数 mod 桶数 == 0) { recordCount = 记录总数 div 桶数。 将每桶的记录数都设为 recordCount } else { recordCount1 = 记录总数 div 桶数 + 1。 int n = 1。 // n 表示桶中记录数为 recordCount1 的最大桶数 m = recordCount1 * n。 while(((记录总数 m) mod (桶数 n)) != 0 ) { n++。 m = recordCount1 * n。 } recordCount2 = (记录总数 m) div (桶数 n)。 将前 n 个桶的记录数设为 recordCount1 将 n + 1 个至后面所有桶的记录数设为 recordCount2 } 根据上面的算法,如果记录总数为 59,桶数为 5,则前 4 个桶的记录数都是 12,最后一个桶的记录数是 11。 如果记录总数为 53,桶数为 5,则前 3 个桶的记录数为 11,后 2 个桶的记录数为 10。 就拿本例来说,记录总数为 6,桶数为 4,则会算出 recordCount1 的值为 2,在结束 while 循环后,会算出 recordCount2 的值是 1,因此,前 2 个桶的记录是 2,后 2 个桶的记录是 1。 范文最新推荐 15 工会党支部工作总结 [工会党支部工作总结 ] xxxx 年,我们工会党支部在师直党工委的正确领导下,认真学习贯彻 “ 三个代表 ” 重要思想,学习党的十六届四中全会精神,自觉用 “ 三个代表 ” 重要思想指导工作,进一步加强党支部的建设,在工作中较好的发挥了政治核心和战斗堡垒作用,工会党支部工作总结。 现将 xxxx 年的支部工作情况总结汇报如下。 一、努力加强党支部的思想建设、组织建设和作风建设 :在工会全体党员中继续深入学习邓小平理论和 “ 三个代表 ” 的重要思想。 在党的 十六大四中全会召开以后,认真学习大会的精神和文件,特别是对全会讨论通过的《关于加强中国共产党执政能力建设的决定》,不仅在支部成员内部认真学习贯彻,而且还在工会全体工作人员中传达贯彻学习。 坚持严肃认真地进行党员民主评议工作,切实解决党支部、党员中存在的问题和不足,努力提高全体党员的思想认识,为圆满完成全年的各项工作,提供思想保证。 同时开好领导班子民主生活会,认真征集职工意见,认真开展批评与自我批评,找差反思,并进行认真整改,进一步完善领导班子的工作。 全年共召开民主生活会 2 次,均取得了良好效果,大家普遍反映心更 近了,关系更融洽了,工作氛围更加和谐了,团队的力量更加强大了。 ,发挥先锋模范作用。 支部坚持 “ 三会一课 ” 制度,按时召开支委会、支部大会和党课学习,坚持党支部委员范文最新推荐 16 经常碰头,有问题及时研究解决。 努力提高组织生活质量,发挥党支部战斗力。 继续认真做好对入党积极分子的培养教育和考察、引导工作。 党支部认真贯彻《关于进一步开展 “ 创建学习型组织,争做知识型职工 ” 活动的通知》,认真组织党员参加学习,结合部门工作具体实际,发动党员积极投入 “ 创争 ” 活动,为我师的职工素质工程作出积极的贡献。 在支部内部,充 分发挥领导干部和骨干党员的先锋模范作用,带动了支部工作跃上了一个新的台阶。 经支部考核评议,推荐经济工作部部长唐志刚同志为 “ 优秀党员 ” 和 “ 优秀公务员 ”。 进一步开展、落实 “ 立党为公,勤政为民 ” 的活动,深入开展与基层单位挂钩活动,经常深入基层连队和职工家庭,详细了解职工群众思想状况和实际困难,并结合工会工作开展理论研讨,撰写出了有一定指导意义的调研论文。 支部要求党员要在各项政治学习活动、日常工作以及机关集体等活动中起模范带头作用,特别强调全体党员在工作中要以维护职工群众 根本利益为第一目标,处处为职工群众着想。 支部要求全体党员在日常工作中以周到的服务、热情的态度、高效的工作和清洁优雅的环境,使各项工作让职工群众满意、基层满意。 二、围绕师党委中心工作,全力开展好工会各项业务工作 今年,工会党支部紧紧围绕师党委的中心工作大局,从维护、建设、教育、参与四项职能出发,切实履行部门工作职能,充分发挥作用,积极投身全师三个文明建设,以作为求地位,以实绩求发展,开拓创新,求真务实,使部门各项业务工作取得了新的进展,工作总结《工范文最新推荐 17 会党支部工作总结》。 (一)按照兵团 “1+3” 文件关于 “ 两个扩大 ” 的要求,不断扩大职工经营自主权和基层民主政治权,以坚持和完善职工代表大会、平等协商签订集体合同、民主选举、团(连)务公开等各项制度为重点,狠抓 “ 六公开、三上墙、两监督和明白卡 ” 等民主管理措施的落实,切实维护职工的合法权益。 在民主管理工作中,今年重点抓了政务公开、明白卡和明白包的发放和管理工作。 (二)积极投身经济建设主战场,大力实施职工 “ 经济技术创新工程 ” ,广泛开展一系列富有成效的劳动竞赛、丰产攻关。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。