天道酬勤,学无止境

SQL开窗函数(窗口函数)详解

一、什么是开窗函数

开窗函数/分析函数:over()

开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数

开窗函数的调用格式为:

函数名(列名) OVER(partition by 列名 order by列名)

如果你没听说过开窗函数,看到上面开窗函数的调用方法,你可能还会有些疑惑。但只要你了解聚合函数,那么理解开窗函数就非常容易了。

我们知道聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等,这些函数常与group by子句连用。除了 COUNT 以外,聚合函数忽略空值。

但有时候一组数据只返回一组值是不能满足需求的,如我们经常想知道各个地区的前几名、各个班或各个学科的前几名。这时候需要每一组返回多个值。用开窗函数解决这类问题非常方便。

开窗函数和聚合函数的区别:

(1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。

(2)聚合函数每组只返回一个值,开窗函数每组可返回多个值。

 

开窗函数与聚合函数一样,也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。

注:常见主流数据库目前都支持开窗函数,但mysql数据库目前还不支持(8.0后已支持)。

不过MySQL中可以通过变通的方式支持开窗函数。

示例:

开窗函数:

SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age)

AS [Partition by Gender],

FirstName,

Age,

Gender

FROM Person;

MySQL实现相同功能:

SELECT

first_name,

age,

gender,

@curRank := @curRank + 1 AS rank

FROM

person p,(SELECT @curRank := 0) r

ORDER BY

age

其他情况只需把开窗函数转换成MySQL支持的语法即可。

转自:https://www.zhihu.com/question/26592291

https://blog.csdn.net/qq_31183727/article/details/107023293

二、使用及说明

1. 分区排序:row_number () over()

有如下学生成绩表:students_grades

 

查询每门课程course_name前三名的学生姓名及成绩,要求输出列格式如下:

course_name, number, stu_name, grades

查询语句如下:

 

2. 几个排序函数row_number() over()、rank() over()、dense_rank() over()、ntile() over()的区别

(1) row_number() over():

对相等的值不进行区分,其实就是行号,相等的值对应的排名不同,序号从1到n连续

(2) rank() over():

相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。

(3) dense_rank() over():

对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。

(4) ntile( n ) over():

可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号,序号从1到n连续。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。

学生成绩表同上,查询语句如下:

 

查询结果如下:

3. 执行顺序

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行,晚于 where 、group by、  order by 的执行

具体可查看文章:https://blog.csdn.net/qq_25221835/article/details/82762416

4. 其他开窗函数

1、row_number() over(partition by … order by …)

增加一列,类似与增加伪列

2、rank() over(partition by … order by …)

3、dense_rank() over(partition by … order by …)

rank(): 跳跃排序,如果有两个第一级时,接下来就是第三级。 
dense_rank(): 连续排序,如果有两个第一级时,接下来仍然是第二级。

4、count() over(partition by … order by …)

5、max() over(partition by … order by …)

6、min() over(partition by … order by …)

7、sum() over(partition by … order by …)

8、avg() over(partition by … order by …)

9、first_value() over(partition by … order by …)

10、last_value() over(partition by … order by …)

与函数的功能一致,只是是开窗函数

11、lag() over(partition by … order by …)

12、lead() over(partition by … order by …)

lag 和lead 可以 获取结果集中,按一定排序所排列的当前行的上下相邻若干offset 的某个行的某个列(不用结果集的自关联); 
lag ,lead 分别是向前,向后; 
lag 和lead 有三个参数,第一个参数是列名,第二个参数是偏移的offset,第三个参数是 超出记录窗口时的默认值)本段转自:https://www.bbsmax.com/A/q4zVkPLxJK/

 

over子句的复用

WINDOW r AS ( PARTITION BY std.ticket_id ORDER BY std.step_end_time ) 

这句话就是将 ‘( PARTITION BY std.ticket_id ORDER BY std.step_end_time ) ’ 声明为子句,然后别名是 r ;然后就可以在 over() 中使用了。

注意:这段声明要写在where句子的后面,如下所示:

SELECT
	std1.* 
FROM
	(
	SELECT
		std.*,
		ROW_NUMBER ( ) OVER ( r ) AS row_idx,
		string_agg ( std.step_name, ',' ) OVER ( r ) AS done_step_names 
	FROM
		step_detail std 
	WHERE
		std.step_operator = '001' 
		AND std.step_status = '2' 
    WINDOW r AS ( PARTITION BY std.ticket_id ORDER BY std.step_end_time ) 
	) AS std1 
WHERE
	std1.row_idx = 1
	

 

本文大部分转载自:https://www.douban.com/group/topic/155112949/

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • hive sql系列(二)
    每天分享一个sql,帮助大家找到sql的快乐 需求:统计每个月访问量和累计月访问量 建表语句 CREATE TABLE visit( userId string, visitDate string, visitCount INT ) ROW format delimited FIELDS TERMINATED BY "\t"; 数据 INSERT INTO TABLE visit VALUES ( 'u01', '2017/1/21', 5 ), ( 'u02', '2017/1/23', 6 ), ( 'u03', '2017/1/22', 8 ), ( 'u04', '2017/1/20', 3 ), ( 'u01', '2017/1/23', 6 ), ( 'u01', '2017/2/21', 8 ), ( 'u02', '2017/1/23', 6 ), ( 'u01', '2017/2/22', 4 ); 实现 select tmp2.userId, tmp2.month, tmp2.total_month, sum(tmp2.total_month) over(partition by userId rows between unbounded preceding and current row) from (select tmp1.userId, tmp1
  • mysql窗口函数(分析函数)知识笔记
    窗口函数 MySQL从8.0开始支持开窗函数,这个功能在大多商业数据库中早已支持,也叫分析函数。开窗函数与分组聚合比较像,分组聚合是通过制定字段将数据分成多份,每一份执行聚合函数,每份数据返回一条结果。开窗函数也是通过指定字段将数据分成多份,也就是多个窗口,对每个窗口的每一行执行函数,每个窗口返回等行数的结果。窗口函数分为静态窗口和滑动窗口,静态窗口的大小是固定的,滑动窗口的大小可以根据设置进行变化,在当前窗口下生成子窗口。 1、窗口函数的定义 窗口函数作用于一个数据集合。窗口函数的一个概念就是当前行,当前行属于某个窗口就是从整个数据集选取一部分数据进行聚合/排名等操作。 2、窗口函数的语法 语法:函数名([参数]) over(partition by [分组字段] order by [排序字段] asc/desc rows/range between 起始位置 and 结束位置) 函数解读:函数分为两个部分,第一部分是函数名称,开窗函数的数量较少,只有11个窗口函数+聚合函数(所有聚合函数都可以用作开窗函数),根据函数性质,有的要写参数,有的不需要写参数; 第二部分是over语句,over()是必须要写的,里面有三个参数,都是非必须参数,根据需求选写: 1.第一个参数是 partition by +分组字段,将数据根据此字段分成多份,如果不加partition by参数
  • 关于 Hive开窗函数
    1、基本语法 Function (arg1,..., argn) OVER ([PARTITION BY <...>] [ORDER BY <....>] [<window_expression>]) Function (arg1,..., argn) 可以是下面的函数: Aggregate Functions: 聚合函数,比如:sum(...)、 max(...)、min(...)、avg(...)等. Sort Functions: 数据排序函数, 比如 :rank(...)、row_number(...)等. Analytics Functions: 统计和比较函数, 比如:lead(...)、lag(...)、 first_value(...)等. 2、前期准备: 2.1、建表语句: CREATE TABLE IF NOT EXISTS temp.test ( `name` string COMMENT '姓名', `dept_num` int COMMENT '编号', `employee_id` int COMMENT 'id', `salary` int COMMENT '工资', `type` string COMMENT '岗位类型', `start_date` date COMMENT '入职时间' ) ROW FORMAT DELIMITED FIELDS
  • 计算机三级——数据库技术
    计算机三级——数据库技术 一、考试内容及要求 掌握数据库技术 的基本概念、原理、方法和技术。能够使用SQL语言实现数据库的基本操作(增删改查)基本数据库系统安装配置以及数据库管理及维护的基本技能。掌握数据库管理和维护的方法。掌握数据库性能优化的方法。了解数据库系统的生命周期及设计和开发过程。了解常用的数据库管理和开发工具,具备用指定的工具管理开发简单数据库应用系统的能力。了解数据库的最新发展。 二、考试题型 选择题——30小题(40分);应用题(填空题)——10小题(30分);设计与应用题——三大题(30分)。画E-R图(考试带有工具 ),范式,SQL语句 三、考试环境 1.软件:SQL service 2008 2.只需在正确答案的前面选中即可(都为单选题) ,在应用题中一空可能会有多个答案选项,在填写答案时要全部写上且要用顿号(、)隔开 3.考试时间为120分钟(上机考试 ),考试结束前5分钟系统会报警提醒考生存盘,考试时间为0自动交卷。 第一章 数据库应用系统开发方法 ①掌握数据库的基本概念。 ②了解软件工程和数据库技术 ③理解DBAS生命周期模型 第一节 基本概念 1.数据 1)数据:是数据库中存储的基本对象。 ​ 定义:描述事物的符号序列。 ​ 数据的种类:数字、文字、图形、图像声音以及其他特殊符号。 2)计算机中的数据分为两个部分:①临时性数据(程序运行时产生的数据
  • MySQL中的sum函数用法实例详解
    今天分享一下mysql中的sum函数使用。该函数已经成为大家操作mysql数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几个小案例深入了解一下该函数,以及在做mysql查询时如何使用sum函数做优化。 语法分析 sum([distinct] expr) [over_clause] returns the sum of expr. if the return set has no rows, sum() returns null. the distinct keyword can be used to sum only the distinct values of expr. if there are no matching rows, sum() returns null. this function executes as a window function if over_clause is present. 上面几句是mysql官方文档的一个功能描述。这里翻译一下大致的意思是什么。 返回expr表达式的和。如果没有返回行数,则返回null。这里的distinct是为了去掉表达式expr中的重复值。 如果没有匹配到行,该函数也返回null。 如果设置了over_clause,则该函数作为窗口函数执行
  • 2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇
    ​ 注:数据分析主要侧重产品sence与Hive使用,也会有少量数据结构、大数据架构与算法相关内容(会放至其它相应篇中)。以下试题为作者面试过程中被经常问到以及日常整理的通用高频面经,包含题目,答案与参考文章,欢迎纠正与补充。 其他相应高频面试题可参考如下内容: 2020 BAT大厂数据挖掘面试经验:“高频面经”之数据结构与算法篇 2020 BAT大厂数据开发面试经验:“高频面经”之大数据研发篇 2020 BAT大厂机器学习算法面试经验:“高频面经”之机器学习篇 2020 BAT大厂深度学习算法面试经验:“高频面经”之深度学习篇 目录 1.Mysql中索引是什么?建立索引的目的? 2.sql语句执行顺序? 3.数据库与数据仓库的区别? 4.OLTP和OLAP的区别? 5.行存储和列存储的区别? 6.Hive执行流程? 7.Hive HDFS HBase区别? 8.数仓中ODS、DW、DM概念及区别? 9.窗口函数是什么?实现原理? 10.数仓中维度建模含义?有哪几种模式? 11.Hive数据倾斜表现、原因及处理? 12.用Python怎么进行数据分析? 13.数据缺失值处理办法 14.Excel中数据透视表,vlookup? 15.AB测试与假设检验? 16.TO C指标体系? 17.如果次留下降了 5%该怎么分析? 18.贝叶斯公式复述并解释应用场景 19.CPA、CPS、CPM
  • 如何使用SQL语句计算百分比(How to calculate percentage with a SQL statement)
    问题 我有一个包含用户及其等级的SQL Server表。 为了简单起见,我们只说有2列name和grade 。 因此,典型的行是名称:“ John Doe”,等级:“ A”。 我正在寻找一条SQL语句,该语句将找到所有可能答案的百分比。 (A,B,C等)。此外,有没有一种方法可以定义所有可能的答案(开放文本字段-用户可以输入“通过/失败”,“无”等)。 我正在寻找的最终输出是A:5%,B:15%,C:40%等... 回答1 我已经测试了以下内容,这确实可行。 gordyii的答案很接近,但是在错误的位置乘以100,并且缺少括号。 Select Grade, (Count(Grade)* 100 / (Select Count(*) From MyTable)) as Score From MyTable Group By Grade 回答2 最有效的(使用over())。 select Grade, count(*) * 100.0 / sum(count(*)) over() from MyTable group by Grade 通用(任何SQL版本)。 select Grade, count(*) * 100.0 / (select count(*) from MyTable) from MyTable group by Grade; 使用CTE,效率最低。 with t
  • [VIM] 插件之cscope详解
    cscope 详解 创建数据库 $ cscope -Rbq -b:仅构建交叉引用(cross-reference)文件,然后退出,不会进入下面的交互界面:-q:通过倒排索引加速符号的查找过程。该选项会导致cscope额外产生cscope.in.out和cscope.po.out两个文件-k: 在生成索引文件时,不搜索/usr/include目录-u: 扫描所有文件,重新生成交叉索引文件-I dir: 在-I选项指出的目录中查找头文件 命令 :cs add cscope.out 添加一个新的数据库:cs find 查询一个模式(Usage: find c|d|e|f|g|i|s|t name) c: Find functions calling this function 调用本函数的函数 d: Find functions called by this function 本函数调用的函数 e: Find this egrep pattern 查找egrep模式 f: Find this file 查找文件 g: Find this definition 查询定义,类似ctags i: Find files #including this file 查找include文件 s: Find this C symbol 查询C符合,函数/枚举/宏 t: Find this text
  • MySQL8.0新特性学习笔记(二):窗口函数
    目录 一,简介 二,窗口函数的两种写法 三,窗口表达式语法 1,PARTITION BY子句 2,ORDER BY子句 3,frame子句 四,窗口函数介绍 1,序号函数:row_number(),rank(),dense_rank() 2,分布函数:percent_rank() / cume_dist() 3,前后函数:lead() / lag() 4,头尾函数:first_val() / last_val() 5,其他函数:nth_value() / nfile() 6,原生聚合函数 MySQL8.0引入的窗口函数,可以比较方便的实现一些分析和统计功能,这些功能不用窗口函数也能实现,不过实现的sql可能会比较复杂。 一,简介 什么是窗口函数 窗口函数引入的其实不只是几个函数,而是一套完整的语法,窗口函数是此语法中的一部分。 语法: 窗口函数 over 窗口表达式。 over是窗口函数语法的关键字。 从语法上来看,窗口函数的使用实际上分为两部分:窗口函数和窗口。 窗口函数在sql中往往使用在查询结果中,返回一列值,就像查询一个字段一样。 窗口 从数据结构上来看,要使用窗口函数,首先我们要有一个窗口,所谓窗口,个人理解是一个数据集,数据集的内容可以类比group by分组之后的一组数据,只不过在使用了窗口函数的sql中,每一行记录都有一个自己的窗口,每行记录所对应的窗口
  • C/C++后端-服务端开发技术博文分类汇总
    文章目录 C语言基础C++基础基础部分特性部分、STL部分C++11、并发编程部分 算法与数据结构排序算法其他算法数据结构部分 Linux操作系统Linux基础-系统编程(计算机操作系统原理相关)网络编程(计算机网络原理相关)内核部分 数据库原理设计模式GitShell C语言基础 《C程序设计 01-03 C语言基础》 《C程序设计 04-06 数组和指针(一)》 《C程序设计 07-09 数组和指针(二)》 《C程序设计 10 函数》 《C程序设计 11 结构体与共用体》 《C程序设计 12 动态内存管理》 《C程序设计 13 文件操作》 《malloc原理和内存碎片》 《浅析malloc的底层实现原理(ptmalloc)》 《大小端存储模式的理解、判断和转换》 《BOOL类型、int型、float型及指针变量如何与“零值”如何比较》 《浅谈define和const的区别》 《C 语言字符串处理系列函数实现》 《C 语言位运算常用技巧》 《C语言 可变参数列表源码剖析及实现》 C++基础 基础部分 《深入程序编译链接和装载过程》 《深入函数的调用堆栈、返回值及调用约定》 《C++ | 类与对象基础》 《C++ | 拷贝构造函数 与 赋值运算符》 《C++ | 对象的生命周期及其程序优化》 《C/C++ 中 const 关键字用法总结》 《C++ | 类成员方法的简单总结》
  • 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
    长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808 点击此处与博主QQ交谈(并可添加好友) 当前版本:v3.14.0 更新日期:2021年03月27日 最近更新博客(由近及远,显示五篇): 《项目实战:Qt+OSG三维2D文字实时效果查看工具》 《关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法》 《关于 error: C2039: “shared_ptr”: 不是“std”的成员 的解决方法》 《Qt实用技巧:Qt中添加对C++11标准的支持(两种方式)》 《saba开发笔记(一):saba介绍、编译使用以及测试》 导航文件 v3.0.0 本地导航文件粉丝0积分下载地址:https://download.csdn.net/download/qq21497936/15202524 (导航文件、各篇开源的代码、运行Demo和各种文件可在 QQ群:1047134658 中免费下载) 目录 开发专栏:商业项目实战 开发专栏:项目实战 Qt开发专栏:开发技术 Qt开发专栏:三方库开发技术 Qt开发专栏:实用技巧 Qt开发专栏:各种问题解决 Qt开发专栏:qss样式表笔记大全 Qt开发专栏:概念 Qt开发专栏:qml开发 树莓派开发专栏 OSG、OSGEARTH三维开发专栏 OpenCV开发专栏 OpenGL开发专栏
  • 一文学完所有的Hive Sql(两万字最全详解)
    Hive Sql 大全本文基本涵盖了Hive日常使用的所有SQL,因为SQL太多,所以将SQL进行了如下分类: 一、DDL语句(数据定义语句):对数据库的操作:包含创建、修改数据库对数据表的操作:分为内部表及外部表,分区表和分桶表二、DQL语句(数据查询语句):单表查询、关联查询hive函数:包含聚合函数,条件函数,日期函数,字符串函数等行转列及列转行:lateral view 与 explode 以及 reflect窗口函数与分析函数其他一些窗口函数文章首发于公众号【五分钟学大数据】,大数据领域原创技术号,每周更新大数据技术文及面试真题解析,关注后可领取精心制作大数据面试宝典!hive的DDL语法对数据库的操作创建数据库:create database if not exists myhive;说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的 :hive.metastore.warehouse.dir创建数据库并指定hdfs存储位置 :create database myhive2 location '/myhive2';修改数据库:alter database myhive2 set dbproperties('createtime'='20210329');说明:可以使用alter database 命令来修改数据库的一些属性
  • 一文学完所有的Hive Sql(两万字最全详解)
    Hive Sql 大全本文基本涵盖了Hive日常使用的所有SQL,因为SQL太多,所以将SQL进行了如下分类: 一、DDL语句(数据定义语句):对数据库的操作:包含创建、修改数据库对数据表的操作:分为内部表及外部表,分区表和分桶表二、DQL语句(数据查询语句):单表查询、关联查询hive函数:包含聚合函数,条件函数,日期函数,字符串函数等行转列及列转行:lateral view 与 explode 以及 reflect窗口函数与分析函数其他一些窗口函数文章首发于公众号【五分钟学大数据】,大数据领域原创技术号,每周更新大数据技术文及面试真题解析,关注后可领取精心制作大数据面试宝典!hive的DDL语法对数据库的操作创建数据库:create database if not exists myhive;说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的 :hive.metastore.warehouse.dir创建数据库并指定hdfs存储位置 :create database myhive2 location '/myhive2';修改数据库:alter database myhive2 set dbproperties('createtime'='20210329');说明:可以使用alter database 命令来修改数据库的一些属性
  • 一文学完所有的Hive Sql(两万字最全详解)
    Hive Sql 大全本文基本涵盖了Hive日常使用的所有SQL,因为SQL太多,所以将SQL进行了如下分类: 一、DDL语句(数据定义语句):对数据库的操作:包含创建、修改数据库对数据表的操作:分为内部表及外部表,分区表和分桶表二、DQL语句(数据查询语句):单表查询、关联查询hive函数:包含聚合函数,条件函数,日期函数,字符串函数等行转列及列转行:lateral view 与 explode 以及 reflect窗口函数与分析函数其他一些窗口函数文章首发于公众号【五分钟学大数据】,大数据领域原创技术号,每周更新大数据技术文及面试真题解析,关注后可领取精心制作大数据面试宝典!hive的DDL语法对数据库的操作创建数据库:create database if not exists myhive;说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的 :hive.metastore.warehouse.dir创建数据库并指定hdfs存储位置 :create database myhive2 location '/myhive2';修改数据库:alter database myhive2 set dbproperties('createtime'='20210329');说明:可以使用alter database 命令来修改数据库的一些属性
  • Oracle group by 用法实例详解
    Group by的语法 Select [filed1,fild2,]聚合函数(filed), [Grouping(filed),] [Grouping_id(filed1,filed2,…)] From tablename Where condition [Group by {rollup|cube}(filed,filed2)] [having condition] [order by filed1] 一、基本用法: (1)我们通过几个例子来研究groupby的基本用法 创建测试表 SQL> create table sales( 2 empid number, --雇员ID 3 depid number, - -部门ID 4 area varchar(20), --区域 5 salenum number); --销售额 表已创建。 SQL> insert into sales values(1,1,'china',10); SQL> insert into sales values(2,1,'china',10); SQL> insert into sales values(3,1,'china',10); SQL> insert into sales values(3,1,'china',10); SQL> insert into sales values(3,1
  • Qt的全面学习笔记【持续更新】
    目录大纲 序认识Qt学习网站安装Qt在Linux时在Windows时32位系统与x86系统关系 构建项目及设置配置Qt右击上下文菜单的某些选项之间区别创建主窗口、设置窗口居中、dialog与widget与mainWindow比较设置QLabel文本居中QLineEdit、QLabel的字体、大小、颜色LineEdit的监视器 pro文件pri文件 rc文件Qt中加入C文件cpp文件改c文件 添加文件添加资源,在资源里添加并使用图片qrc文件 在已有的项目中分别添加头文件、源文件 与 使用.h文件 多个UI界面的联系qmake为什么main()函数总是有"return a.exec"myDlg.exec()==QDialog::Accepted模态与非模态的区别模态对话框非模态对话框 show()与exec()的区别show()exec()同中不同:模式对话框的显示不同 顺便提下:C语言的main函数为什么要返回0? int main(int argc, char *argv[]){}include <xxx.h> 与 include "xxx.h" 的区别#ifndef XXX_H #define XXX_H .... #endif之间的关系与区别延伸#ifdef...#else...#endif与#ifndef...#else...#endif#if defined
  • 最常见的SQL反模式是什么? [关闭](What are the most common SQL anti-patterns? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我们所有使用关系数据库的人都已经知道(或正在学习)SQL是不同的。 选出想要的结果并有效地进行,涉及到一个乏味的过程,部分过程是学习不熟悉的范例,并发现我们最熟悉的编程模式在这里不起作用。 您见过(或自己犯过)的常见反模式是什么? 回答1 对于大多数程序员在数据访问层中混合其UI逻辑的趋势,我始终感到失望: SELECT FirstName + ' ' + LastName as "Full Name", case UserRole when 2 then "Admin" when 1 then "Moderator" else "User" end as "User's Role", case SignedIn when 0 then "Logged in" else "Logged out" end as "User signed in?", Convert(varchar(100), LastSignOn, 101) as "Last Sign On", DateDiff('d', LastSignOn, getDate()) as
  • Flink(五)Flink的窗口和水印机制
    一、概念 1、什么是window 在流式数据中,数据是连续的,通常是无限的,对流中的所有元素进行计数是不可能的,所以在流上的聚合需要由window来划定范围,例如过去五分钟内用户浏览量的计算或者最后100个元素的和。window就是一种可以把无限数据切割为有限数据块的手段。窗口可以由时间或者数量来做区分1.根据时间进行截取,比如每10分钟统计一次,即时间驱动的[Time Window]2.根据消息数量进行统计,比如每100个数据统计一次,即数据驱动[Count Window] 2、时间窗口的类型 时间窗口又分为滚动窗口,滑动窗口,和会话窗口(1)滚动窗口-tumbling windows时间对齐,窗口长度固定,没有重叠如图:以固定的长度进行分割,比如一分钟的内的计数 开窗方法: //滚动窗口 stream.keyBy(0) .window(TumblingEventTimeWindows.of(Time.seconds(2))) .sum(1) .print(); (2)滑动窗口-sliding windows时间对齐,窗口长度固定,有重叠,展现的是数据的变化趋势如图:窗口大小为4,步长为2,每隔两秒统计仅4s的数据 开窗方法: //滑动窗口 stream.keyBy(0) .window(SlidingProcessingTimeWindows.of(Time.seconds(6
  • 史上最小白之CNN 以及 TextCNN详解
    本小白是一名立志从事NLP的菜鸟,本来只准备写一篇TextCNN来加深自己理解地,但想要了解TextCNN那必然需要了解CNN的原理,写的过程中突然想起了自己在学习时各种看博客的心路历程,看一篇博客要是有太多的地方博主没怎么介绍,而自己又不懂的话就会特别烦,看一半就会不想看了,又再去茫茫互联网中搜索其他的博客实在是太没效率和打击学习积极性了,于是写着写着就写了这篇终极小白文,尽量做到每个知识点都覆盖且简单易懂,本人才疏学浅,可能会有不严谨的地方,如有错误,欢迎指正~废话不多说,走起!!! 1.卷积神经网络原理 CNN 卷积神经网络结构: 上图是一幅完整的CNN网络结构图,输入层input layer、卷积层CONV layer、ReLU激励层ReLU layer、池化层Pooling layer、全连接层FNN layer组成。 1.1输入层 目前CNN被广泛运用于计算机视觉中,因此大部分人都直接把CNN的输入层输入的数据默认为是3维数据,即平面上的二维像素点和RGB通道。 例如上图一张彩色图片由三张二维图片构成,每一张二维的图片又被称作是一个feature map,这里有三个feature map,输入的数据就是 6 x 6 x 3 在输入层需要对原始数据进行预处理,常见的方法有: 去均值:顾名思义,就是RGB三个维度上的数据,每一个数据点都减去他们所在维度的均值就行了 归一化
  • LeetCode 80. 删除排序数组中的重复项 II Python3详解
    【原题连接】 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,1,2,3,3], 函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }