重学SQL窗口函数

窗口函数语法

SQL窗口函数是SQL中的一种高级函数,它允许用户在不显式分组查询的情况下对结果集进行分组和聚合计算。
窗口函数的特别之处在于,它们将结果集中的每一行看作一个单独的计算对象,而不是将结果集划分为分组并计算每个分组的聚合值。这就使得窗口函数能够为结果集中的每一行计算类似排名、行号、百分比和移动聚合函数等值。

SQL窗口函数的语法如下:

<窗口函数> OVER ([PARTITION BY <分组列> [, <分组列>...]]
                     [ORDER BY <排序列> [ASC | DESC] [, <排序列> [ASC | DESC]]...]
                     [<rows or range clause>])

其中:

  • <窗口函数> : 定义要在窗口中计算的聚合函数或其它分析函数,如COUNT、RANK、SUM等。
  • OVER : 窗口函数的核心关键字。
  • PARTITION BY : 定义要用来分组的一组列名。
  • ORDER BY : 定义用来排序的一组列名。
  • <rows or range clause> : 定义窗口的行集合。默认为 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ,表示窗口包括从窗口开始到当前行的所有行。

下面的例子说明了如何使用窗口函数计算每个部门的平均工资,并根据平均工资进行排名。

SELECT department, employee_name, salary, 
  AVG(salary) OVER (PARTITION BY department) average_salary, 
  RANK() OVER (PARTITION BY department ORDER BY salary DESC) salary_rank
FROM employee;

在这个例子中,PARTITION BY定义了用于分组计算平均工资的列名,OVER后面依次定义了需要计算的列名和相应的窗口函数。 AVG(salary) OVER (PARTITION BY department) 的意思是对于每个部门,计算 salary 列的平均值,而 RANK() OVER (PARTITION BY department ORDER BY salary DESC) 的意思是计算每个部门中 salary 列的排名。
SQL窗口函数的语法和用法比较复杂,但它极大地拓展了SQL查询的能力,使得更多复杂的查询可以得以实现。

更多说明

窗口函数是一种SQL函数,可以在不影响查询结果的情况下,为查询结果集中的每一行计算聚合函数、排名、行号等。

窗口函数的使用场景有很多,例如统计某个时间段内的每天销售量排名、计算每个部门的平均工资并与其他部门进行比较、计算每个产品上个月和本月的销售额变化等。

以下是一个使用窗口函数的查询示例和结果,该查询用于计算某个时间段内每天的销售量排名。

假设有一张包含销售信息的表sales,包括销售日期、销售量和产品ID等字段。

现在需要查询2021年1月1日至1月10日期间每天的销售量排名,包括每天的日期和排名信息。

以下是使用窗口函数实现该查询的SQL语句:

SELECT sale_date, sale_volume, ROW_NUMBER() OVER(PARTITION BY sale_date ORDER BY sale_volume DESC) as sales_rank
FROM sales
WHERE sale_date BETWEEN '2021-01-01' AND '2021-01-10'

该查询将sales表根据销售日期进行分组,计算每个日期的销售量,并使用ROW_NUMBER()函数为每个日期的销售量进行排名。

以下是该查询的查询结果:

sale_date sale_volume sales_rank
2021-01-01 12500 1
2021-01-02 13800 1
2021-01-03 13000 1
2021-01-04 11800 2
2021-01-05 12500 1
2021-01-06 14000 1
2021-01-07 11500 1
2021-01-08 12800 1
2021-01-09 13100 1
2021-01-10 12900 1

ps:上面的结果有问题。

SQL的窗口函数中常见的排序方法

SQL的窗口函数中常见的排序方法包括以下几种:

  1. ROW_NUMBER()函数:按照指定的列或表达式对结果集进行排序,并为排序后的每一行分配一个唯一的行号。
  2. RANK()函数:对结果集进行排序,并为排序后的相同值的行分配相同的排名,排名之间存在空缺。
  3. DENSE_RANK()函数:对结果集进行排序,并为排序后的相同值的行分配相同的排名,排名之间不存在空缺。
  4. CUME_DIST()函数:计算结果集中某个值在排序后出现的位置占总行数的比例。
  5. NTILE(n)函数:将结果集划分为n份,并为每个分组分配一个编号。

注意,以上窗口函数中的排序方法都是基于ORDER BY子句中指定的列或表达式的排序。

以下是五种窗口函数的排序方法及其例子:

  1. ROW_NUMBER():按照指定的排序方法为每行分配一个唯一的整数行号,行号从1开始递增。示例如下:
SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, employee_name, salary
FROM employee;

该语句会对employee表按照salary字段降序排序,并为每行分配一个不重复的行号存储在row_num字段中。

  1. RANK():按照指定的排序方法为每行分配一个排名,相等值将被分配相同的排名并跳过下一个排名。示例如下:
SELECT RANK() OVER (ORDER BY total_sales DESC) AS ranking, region_name, total_sales
FROM sales_summary
WHERE year = '2021';

该语句会对2021年销售总额按照降序排序,并为每行分配一个排名存储在ranking字段中。

  1. DENSE_RANK():按照指定的排序方法为每行分配一个密集排名,相等值将被分配相同的排名但不会跳过下一个排名。示例如下:
SELECT DENSE_RANK() OVER (ORDER BY exam_score DESC) AS rank, student_name, exam_score
FROM exam_results
WHERE exam_type = 'final';

该语句会对final考试的成绩按照降序排序,并为每行分配一个密集排名存储在rank字段中。

  1. NTILE(n):将行分成n个近似相等的桶,并为每行分配一个桶号(从1到n)。示例如下:
SELECT NTILE(4) OVER (ORDER BY product_sales DESC) AS quartile, product_name, product_sales
FROM product_summary
WHERE year = '2021';

该语句会将2021年产品销售额按照降序排序,并将其分成四个桶,为每行分配一个桶号存储在quartile字段中。

  1. LAG()/LEAD():LAG函数用于获取当前行之前的行数据,LEAD函数用于获取当前行之后的行数据。示例如下:
SELECT employee_name, salary,
       LAG(salary, 1) OVER (ORDER BY salary) AS prev_salary,
       LEAD(salary, 1) OVER (ORDER BY salary) AS next_salary
FROM employee;

该语句会对employee表按照salary字段排序,并为每行获取前一行和后一行的salary值存储在prev_salary和next_salary字段中。

窗口函数的常见场景

窗口函数是在SELECT语句中用来执行聚合、排序、排名等操作的一种特殊函数。它们操作一个窗口(Window)内的数据集,并返回一个与当前行相关的聚合结果。

以下是一些使用窗口函数的常见场景和示例:

  1. 排序:使用窗口函数的排名功能可以将结果按照指定的列进行排序,而不影响结果集中其他列的排序。
    例如,以下SQL语句用排名窗口函数将销售额进行降序排列,并在结果集中显示销售额排名的值:
    SELECT order_no, order_date, customer_name, order_amount,
           RANK() OVER (ORDER BY order_amount DESC) as rank
    FROM orders;
  1. 聚合:窗口函数可以将数据集划分为多个分区,并在每个分区内执行聚合操作。
    例如,以下SQL语句使用SUM函数计算每个客户的累计销售额,并使用窗口函数将结果分区:
    SELECT customer_name, order_date, order_amount,
           SUM(order_amount) OVER (PARTITION BY customer_name ORDER BY order_date) as cumulative_sales
    FROM orders;
  1. 分析:使用窗口函数的分析功能可以计算每行与其他行之间的差异。例如,以下SQL语句计算每个销售额相对于上一个销售额的增量,并使用窗口函数进行分析:
    SELECT order_no, order_date, order_amount,
           order_amount - LAG(order_amount, 1, 0) OVER (ORDER BY order_date) as sales_increase
    FROM orders;

假设有一张包含学生成绩信息的表scores,包括学生ID,课程ID和成绩。现在需要查询每个学生最高成绩和次高成绩,并计算两者的差值(用作成绩提升分析)。

以下是使用窗口函数实现该查询的SQL语句:

SELECT student_id, MAX(score) as max_score, 
       LAG(MAX(score), 1, 0) OVER (PARTITION BY student_id ORDER BY score DESC) as second_max_score, 
       MAX(score) - LAG(MAX(score), 1, 0) OVER (PARTITION BY student_id ORDER BY score DESC) as score_gap
FROM scores
GROUP BY student_id

该查询将scores表按照student_id分组,计算每个学生的最高成绩和次高成绩,并计算两者的差值。以下是该查询的查询结果:

student_id max_score second_max_score score_gap
1 95 89 6
2 88 82 6
3 86 75 11
4 92 84 8
5 94 91 3

以上是用markdown展示的查询结果,包括查询到的学生ID,最高成绩,次高成绩和两者的差值。

  1. 移动平均数:使用窗口函数的移动平均功能可以计算指定数量的前后数据行的平均值。
    例如,以下SQL语句计算每个销售额的一个2周滑动平均值,并使用窗口函数进行计算:
    SELECT order_date, order_amount,
           AVG(order_amount) OVER (ORDER BY order_date ROWS BETWEEN 13 PRECEDING AND CURRENT ROW) as moving_average
    FROM orders;

这些只是窗口函数的一些常见用途和示例。实际上,窗口函数非常灵活,可以用于各种不同的数据分析和处理场景。

本文转载于网络 如有侵权请联系删除

相关文章

  • 重学 SQL(九)

    重学SQL(九)發佈於 2020-08-24本篇,我们介绍一个对于大型或高并发数据库影响非常有大的知识——索引。了解它是如何工作的以及它为何能提升性能。 点击下载创建本章所用数据库脚本。Index索引实际上是数据库用于快速检索数据的数据结构。如果没有索引,数据库会扫描每条记录。通过索引可以快速找到对应记录,这比遍历整个表的数据要高效得多。索引的缺点:增加数据库大小,因为索引要和表一起保存增删改数据时,MySQL会自动更新索引,影响当前操作效率,所以我们只给特别重要的查询增加索引注意:我们不要根据表来创建索引,而是根据查询内容来创建。给设计好的表增加索引就像解决了不存在的问题一样,所以不要盲目地给某一列添加索引。在具体实现上,索引通常以二叉树的方式保存的。创建索引我们先来观察一个简单的搜索。EXPLAINSELECTcustomer_id FROMcustomers WHEREstate='CA';复制typerowsALL1010如果显示type字段为ALL,则说明本次查询为全表扫描,rows为扫描的记录数。 然后我们对state列创建索引:CREATEINDEXi

  • Go编程基础-基础篇 17

    Go语言中的nilnil是特殊的零值任何一个变量在声明之后会自动被赋予一个零值。数值类型的变量零值为0,字符串为"",而指针、切片、map、通道、函数和接口的零值就是nil。packagemain import"fmt" funcmain(){ varmmap[int]string varp\*int varcchanint vars[]int varffunc() variinterface{} fmt.Printf("map:%#v\n",m) fmt.Printf("指针:%#v\n",p) fmt.Printf("通道:%#v\n",c) fmt.Printf("切片:%#v\n",s) fmt.Printf("函数:%#v\n",f) fmt.Printf("接口:%#v\n",i) }复制map:map[int]string(nil) 指针:(\*int)(nil) 通道:(chan

  • Android实现自动填充短信验证码

    本文实例为大家分享了Android自动填充短信验证码的具体代码,供大家参考,具体内容如下短信验证码是大部分软件里面都存在的功能,同时为了避免用户自己输入导致的繁琐操作,有一部分app设计者将其设置成了自动填充的方式,方便用户操作那么这种方式是什么实现的呢。利用广播接收器来拦截短信获取其中匹配的内容,提供回掉,将短信内容暴露到activity中实现自动填充首先我们要实现一个广播接收器packagecom.wquant.weilt.reciver; importjava.util.regex.Matcher; importjava.util.regex.Pattern; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Message; importandroid.telephony.SmsMessage; importandroid.text.Tex

  • 不要轻易合并单元格

    问题描述在Excel的数据分析中,是切记不要合并单元格的,这可能会导致不能排序等一些列问题。而我为了表格好看,在工作的前几天就入了这种坑。那我们以下面的数据为例,看看如何取消单元格合并。Python解决①利用pandas读取数据。importpandasaspd data=pd.read_excel('test.xlsx',sheetname='Sheet1',header=None) data复制我们可以看到,合并单元格的可怕了吧。用pandas读,都是会有缺失值的。②缺失值填充 其实,我们只需要先前填充缺失值,就行了。data[0].fillna(method='pad',inplace=True) data复制Excel解决用编程可以来做,但是条件太苛刻。需要Python环境读数据-处理数据-导出数据,流程太多。所以我们用Excel来解决。刚开始,我想着是取消单元格合并后,手动进行填充,但数据量很多的时候,是很麻烦的。接下来,我们看看简单办法。①取消单元格合并。②选中第一列数据,用ctrl+g,定位条件选择空值。③输入

  • TCGA数据下载:R包RTCGAToolbox介绍

    前面介绍了3种获取TCGA数据的方法:使用TCGA2STAT、TCGAbiolinks、RTCGA。这里再介绍一个包:RTCGAToolbox包,这个包是我最为推荐的,原因是我使用时它下载数据最快、最为稳定可靠。RTCGAToolbox下载方法 ##tryhttp://ifhttps://URLsarenotsupported source("https://bioconductor.org/biocLite.R") biocLite("RTCGAToolbox")复制帮助文档: http://bioconductor.org/packages/release/bioc/manuals/RTCGAToolbox/man/RTCGAToolbox.pdf可下载的数据请参考帮助文档或博客TCGA2STAT。案例介绍 #包下载 source("https://bioconductor.org/biocLite.R") biocLite("RTCGAToolbox") #加载包 library(RTCGAToolb

  • 分布式缓存小结

    一分布式缓存特性1)高性能:当传统数据库面临大规模数据访问时,磁盘I/O往往成为性能瓶颈,从而导致过高的响应延迟.分布式缓存将高速内存作为数据对象的存储介质,数据以key/value形式存储,理想情况下可以获得DRAM级的读写性能; 2)动态扩展性:支持弹性扩展,通过动态增加或减少节点应对变化的数据访问负载,提供可预测的性能与扩展性;同时,最大限度地提高资源利用率; 3)高可用性:可用性包含数据可用性与服务可用性两方面.基于冗余机制实现高可用性,无单点失效(singlepointoffailure),支持故障的自动发现,透明地实施故障切换,不会因服务器故障而导致缓存服务中断或数据丢失.动态扩展时自动均衡数据分区,同时保障缓存服务持续可用; 4)易用性:提供单一的数据与管理视图;API接口简单,且与拓扑结构无关;动态扩展或失效恢复时无需人工配置;自动选取备份节点;多数缓存系统提供了图形化的管理控制台,便于统一维护; 5)分布式代码执行(distributedcodeexecution):将任务代码转移到各数据节点并行执行,客户端聚合返回结果,从而有效避免了缓存数据的移动与传输.最新的Ja

  • 接口设计六大原则

    一.单一职责原则SingleResponsibilityPrinciple,简称SRP。定义Thereshouldneverbemorethanonereasonforaclasstochange应该有且仅有一个原因引起类的变准则职责的划分?单一的定义和级别? 应该根据实际业务情况而定。关注变化点。 实际使用时,类很难做到职责单一,但是接口的职责应该尽量单一。 二.里氏替换原则LiskovSubstitutionPrinciple,简称LSP。定义Functionsthatusepointersorreferencestobaseclassesmustbeabletouseobjectsofderivedclasseswithoutknowingit所有引用基类的地方必须能透明地使用其子类的对象准则里氏替换原则为良好的继承定义了一个规范:子类必须完全实现父类的方法 子类可以有自己的个性(属性和方法)。 覆盖或实现父类的方法时输入参数可以被放大。 覆写或实现父类的方法时输出结果可以被缩小。 注:在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP

  • 准备冲锋 golang入坑系列

    史前摘要:本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意。所以换成史前摘要,反正是一个意思。此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里。放到博客园的目的是为了方便不能FQ的同学查看。有人说写的太肤浅没意思,我的回答是,饭有粗茶咸淡,味有酸甜苦辣,萝卜青菜各有所爱。没辙,本人也就这点能耐了,耐看您就多看点,不耐看,呵呵,那我也改不了啦。好,史前的话说完了,下面开始史后的话。树活一张皮,人活一张脸。文章好不好,标题最重要。光起名就想了10几分钟,中国汉语博大精深,但适合做技术类标题的真心太难想了。标题不够,写诗来凑,所以来段绕口小段子算是开场:守法朝朝忧闷,强盗夜夜欢歌。损人利己骑马骡,正直公平却挨饿。修桥补路瞎眼人,杀人放火事儿真多。我到西天问我佛,佛说:我TM也没辙。看完,乐完。收拾心情,开始继续学Golang。在上一节,你学会了写第一个Golang程序,也知道了Golang的程序结构。我不知道你是什么技术背景,也不知道有多少编码功底。所以有的地方写的比较啰嗦,懂了,就一笑而过。不懂,就好好看一下。知识多了,不丢人。不懂装懂,最可怕。这一节,你将接触到G

  • 利用SetConsoleTextAttribute函数设置控制台颜色

    控制台单调的颜色只有黑白两种,看起来多少难免有些单调。在没学图形化编程之前,每天看着控制台程序难免会枯燥无味。 不过,利用SetConsoleTextAttribute函数可以设置控制台的前景色和背景色。 闲言少叙,书归正传。 ①效果图:(颜色可以混合,遵循配色原理) #include <windows.h> #include <iostream> usingnamespace std;   int main()   {   HANDLE hOut;       hOut = GetStdHandle(STD_OUTPUT_HANDLE);       SetConsoleTextAttribute(hOut,                               FOREGROUND_RED |                                FOREGROUND_GREEN);       cout << "This text is yellow." << endl;     

  • 大数据专才:“走俏”变“紧缺”

    应对大数据时代的挑战,国内学术界最近动静不小。中科院院士马志明说,上月他每周都在见证一家全新的、和大数据相关的研究机构或研究平台诞生。从中科院系统内部培育的重点实验室到国家基金委的“双清论坛”,再到日前上海财经大学携手国家统计局成立“大数据统计科学中心”—一个信号已经非常清晰:对大数据的深挖和系统研究,已是板上钉钉的国家战略。“在大数据时代,数据科学家和数据工程师非常紧缺。”根据一些机构的测算,未来5年,国内各行各业需要的大数据专业人才,缺口将高达1000万左右。对海量数据信息的处理手段还远不够大数据正给各行各业带来巨变。以保险业的车险为例,如果在每辆汽车上加载一个行驶监测设备,保险公司就可以轻松掌握每一个用户的车辆使用情况、个人驾驶习惯等。基于这些关键数据,保险公司就可以针对不同的用户“定制”不同的车险品种,从而提高投保的精准率。上海财经大学统计与管理学院院长周勇教授说,无论是学术界还是企业界都已察觉,大数据是一座“富矿”,对大数据的收集、深挖过程,本身就伴随着很多的发展机会。但开掘“富矿”并不容易。比如,对海量数据信息的处理手段,目前还远远不够。有业内人士做过测算,假设一个城市有3

  • jquery定时执行函数_jquery自动提交

    大家好,又见面了,我是你们的朋友全栈君。setTimeout用于延时器,只执行一次.setInterval:用于多次执行.functiongetnums(){ $.get("http://special.ku6.com/office2010/api/nums.php?"+Math.random(),function(data){ nums='<imgsrc="images/cnt/left.gif"width="62"height="27"/>'; $.each(data,function(i){ num=data.substr(i,1); nums+='<imgsrc="images/cnt/'+num+'.gif"width="16"height="27"/>'; }); nums+='<imgsrc="images/cnt/right

  • 随笔-20210315

    随笔-20210315 现在晚上八点钟,打雷了,下雨了呢。 希望明天可以重来…… 重新制定计划,明天获得重生吧。

  • 王永庆传-读书笔记2

    王永庆全传双根编著 第6章赤子之心——为两岸关系奔走 1989年11月30日,这是一个不同寻常的日子。王永庆在家人的陪同下从美国出发,先取道日本,后又经大连进入大陆。对于王永庆的到来,大陆高层领导给予了高度重视,并派专人赴大连机场迎接。 王永庆的总体设想是投资70亿美元,建造一座年炼油1000万吨、乙烯70万吨的石化工厂,并自备电厂和远洋与内河运输船队,产品100%供应国际市场。围绕这一设想,王永庆向大陆有关部门提出了三个条件:一是大陆一方向台塑提供一定数量的原油;二是双方以合资方式合作;三是由大陆一方提供可供建厂的土地。另外,为表示合作的诚意,王永庆亲自选派当时担任长庚医院院长的张昭雄与大陆卫生部门洽谈,并提出,台塑愿向大陆捐献两座各3000张床位的医院。 两岸关系的不稳定直接影响到了双方投资者之间的经济往来。1989年5月13日,台湾“经济部长”陈履安重申,禁止岛内企业界直接投资大陆。5月24日,台湾有关官员透露,当局已拟具“原则禁止,例外规范”的间接投资要点,准许“合乎规定的”台湾厂商以间接方式赴大陆投资。所以说,王永庆在当时的情况下赴大陆考察,仍旧冒着被人说成“通匪、资匪”的风

  • 网络爬虫通用策略

    1、通用爬虫框架: 选取种子URL-》放入待抓取URL队列-》下载网页形成网页库-》已抓取URL队列-》抽取URL放入待抓取URL队列末尾 已下载网页集合==已过期网页集合==待下载网页集合==可知网页集合==不可知网页集合 2、禁抓协议:爬虫禁抓协议(robot.txt)+网页禁抓协议(html中嵌入<metaname='robots')两类 3、衡量标准:网页覆盖率、网页时新性、网页重要性 4、抓取策略:宽度优先遍历策略、非完全pagerank策略、OPIC策略、大站优先策略 5、网页更新策略:历史参考策略、用户体验策略、聚类抽样策略 6、暗网抓取:百度『aladdin』google『富含信息查询模板+ISIT算法』 7、分布式集群爬虫:主从式、对等式(利用一致性hash算法)

  • docker安装redis

    https://blog.csdn.net/qq_33562996/article/details/80538022

  • UVa 156 - 反片语Ananagrams

    Ananagrams  Mostcrosswordpuzzlefansareusedto anagrams--groupsofwordswiththesamelettersindifferentorders--forexampleOPTS,SPOT,STOP,POTSandPOST.Somewordshoweverdonothavethisattribute,nomatterhowyourearrangetheirletters,youcannotformanotherword.Suchwordsarecalled ananagrams,anexampleisQUIZ.   Obviouslysuchdefinitionsdependonthedomainwithinwhichweareworking;youmightthinkthatATHENEisanananagram,whereasanychemistwouldquicklyproduceETHANE.OnepossibledomainwouldbetheentireEng

  • Java查漏补缺-小细节

    1.类型转换问题 publicstaticvoidmain(Stringargs[]){ intnum=2147483647; num+=1L;//根据num的类型,先将1L转为int,然后再相加,故结果为-2147483648 //longb=num+1L;//根据b类型,将num升级为long类型,然后相加 //intb=Integer.MAX_VALUE;2147483647 //intb=Integer.MIN_VALUE;-2147483648 System.out.println(num); }复制  输出:-2147483648   2.逻辑运算,与运算(前边失败的,后边不会执行),或运算(前边成功的,后边也不会执行) publicstaticvoidmain(Stringargs[]){ booleanflag=10%2==1&&10/3==0&&1/0==0; System.out.println(flag?"mldn":"yootk"); }复制  输出:yootk(10%2==1为false,后

  • aspnetcore 基本功能

    配置: usingMicrosoft.AspNetCore.Builder; usingMicrosoft.AspNetCore.Mvc; usingMicrosoft.AspNetCore.Mvc.Filters; usingMicrosoft.Extensions.Configuration; usingMicrosoft.Extensions.DependencyInjection; usingNewtonsoft.Json; usingSystem; usingSystem.Collections.Generic; usingSystem.IO; usingSystem.Reflection; usingSystem.Text; usingSystem.Text.Json; namespaceCoreApi.Extend { publicclassIsServiceAttribute:System.Attribute { } publicstaticclassLoadService { ///<summary> ///注入根配置appsettings.jso

  • Caffe 编译后版本 下载即可使用

    百度地址:https://pan.baidu.com/s/1ETss8tqdJ5NikdVh_GJKnw提取码:zyx9 参考blog https://www.cnblogs.com/zl20pn/p/6218958.html   非常棒的blog https://blog.csdn.net/weixinhum/article/details/71304852解释caffe 使用步骤 数据转化 convert_cifar_data.exe./examples/cifar-10-batches-bin./examples/cifar10leveldb 计算mean文件 compute_image_mean.exe-backend=leveldb./examples/cifar10/cifar10_train_leveldbmean.binaryproto 迅速训练 D:\applications\anaconda2\Lib\site-packages\caffe\caffe.exetrain--solver=examples\cifar1

  • 理解java线程中断

    一个线程在未正常结束之前,被强制终止是很危险的事情.因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。所以你看到Thread.suspend,Thread.stop等方法都被Deprecated了   那么不能直接把一个线程搞挂掉,但有时候又有必要让一个线程死掉,或者让它结束某种等待的状态该怎么办呢?一个比较优雅而安全的做法是:使用等待/通知机制或者给那个线程一个中断信号,让它自己决定该怎么办。   等待/通过机制在另一篇博客中详细的介绍了。这里我们理解线程中断的使用场景和使用时的注意事项,最后使用Demo来理解。   中断线程的使用场景:   在某个子线程中为了等待一些特定条件的到来,你调用了Thread.sleep(10000),预期线程睡10秒之后自己醒来,但是如果这个特定条件提前到来的话,来通知一个处于Sleep的线程。又比如说.线程通过调用子线程的join方法阻塞自己以等待子线程结束,但是子线程运行过程中发现自己没办法在短时间内结束,于是它需要想办法告诉主线程别等我了.这些情况下,就需要中断. &

  • 用友CDM系统小技巧

    修改列显示宽度:修改表 fldlist

相关推荐

推荐阅读