需求  查询小时气象表中 同一日期、同一城市、同意检测站点  首要污染物出现次数最多的记录

第一步: 添加 排序字段

select StationID,RecordDate,CityID,Primary_Pollutant,ROW_NUMBER() over(partition by StationID,RecordDate,CityID order by count(0) desc ) as Numfrom  T_AirHourly

group by StationID,RecordDate,CityID,Primary_Pollutant

第二步  子查询:在查询的基础上再次查询

select StationID,RecordDate,CityID,Primary_Pollutant from (

select StationID,RecordDate,CityID,Primary_Pollutant,ROW_NUMBER() over(partition by StationID,RecordDate,CityID order by count(0) desc ) as Numfrom  T_AirHourly

group by StationID,RecordDate,CityID,Primary_Pollutant

)t where t.Num = 1

第三步 创建视图

create view V_Primary_Pollutant as

select StationID,RecordDate,CityID,Primary_Pollutant from (

select StationID,RecordDate,CityID,Primary_Pollutant,ROW_NUMBER() over(partition by StationID,RecordDate,CityID order by count(0) desc ) as Numfrom  T_AirHourly

group by StationID,RecordDate,CityID,Primary_Pollutant

)t where t.Num = 1

结果:

第五步: 统计一天中各种污染物的平均值

将视图作为独立模块  左连接查询  统计一天 各种污染物的平均值。

转载:

row_ number over函数的基本用法

https://xiaoxiaoher.iteye.com/blog/2428619

函数语法: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

函数作用:从1开始,为按组排序的每条记录添加一个序列号  函数只能用于select和order by子句中 不能用在where子句

不分组排序

不进行分组时语法为ROW_NUMBER() OVER(ORDER BY COLUMN),如:

有一个表A就一个字段num,数据如下

num

10

20

30

查询语句为select row_number() over(order by num) as idx,num from A

结果如下

num      idx

10          1

20          2

30          3

分组排序

分组的话ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)表示根据COL1分组,在分组内部根据COL2排序,

而此函数的结果值就表示每组内部排序后的顺序编号(组内连续的惟一的)

表employee有数据如下

empid        deptid            salary

1               10                   5500.00

2               10                   4500.00

3                20                  1900.00

4               20                   4800.00

查询语句为:select *,row_number() over(partition by deptid order by salary desc) rank from employee

结果如下

empid        deptid             salary            rank

1                10                   5500.00        1

2                 10                  4500.00         2

4                 20                  4800.00         1

3                 20                  1900.00         2

比较

可以看到这个函数不分组时的作用oracle自带row_num也能完成,差别就是row_num从0开始。分组排序这个功能就比较强大

另外还有两个类似函数rank() over() 和dense_rank() over()

区别就是如果排序字段有重复值

row_number()函数还是1 2 3排下去

rank() over()则会出现 1  1  3

dense_rank() over() 则会出现 1 1 2

这三种情况 就是给的序号不一样

ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

 

转载:https://www.cnblogs.com/alsf/p/6344197.html

http://www.cnblogs.com/BluceLee/p/8004716.html

1、row_number() over()排序功能:

(1) row_number() over()分组排序功能:

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

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

例如:employee,根据部门分组排序。

SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee
--------------------------------------
000010 A00 152750 1
000110 A00 66500 2
000120 A00 49250 3
200010 A00 46500 4
200120 A00 39250 5
000020 B01 94250 1
000030 C01 98250 1
000130 C01 73800 2

(2)对查询结果进行排序:(无分组)

SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (ORDER BY salary desc) rank FROM employee
--------------------------------------
000010 A00 152750 1
000030 C01 98250 2
000070 D21 96170 3
000020 B01 94250 4
000090 E11 89750 5
000100 E21 86150 6
000050 E01 80175 7
000130 C01 73800 8
000060 D11 72250 9

row_number() over()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).

2、rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).

select workdept,salary,rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
------------------
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 73800 3

3、dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .

select workdept,salary,dense_rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
------------------
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 73800 2
C01 98250 3

使用ROW_NUMBER删除重复数据 
---假设表TAB中有a,b,c三列,可以使用下列语句删除a,b,c都相同的重复行。

DELETE FROM (select year,QUARTER,RESULTS,row_number() over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) AS ROW_NO FROM SALE )
WHERE ROW_NO>1

sql 查询 某字段 重复次数 最多的记录的更多相关文章

  1. sql 查询哪些字段重复及(in和exict的区别)

    select count(1),content_id,keyword_id from tb_content_keyword_relation group by content_id,keyword_i ...

  2. MySQL查询重复出现次数最多的记录

    MySQL查询的方法很多,下面为您介绍的MySQL查询语句用于实现查询重复出现次数最多的记录,对于学习MySQL查询有很好的帮助作用. 在有些应用里面,我们需要查询重复次数最多的一些记录,虽然这是一个 ...

  3. SQL查询语句去除重复行

    1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录 ...

  4. POJ-3693-Maximum repetition substring(后缀数组-重复次数最多的连续重复子串)

    题意: 给出一个串,求重复次数最多的连续重复子串 分析: 比较容易理解的部分就是枚举长度为L,然后看长度为L的字符串最多连续出现几次. 既然长度为L的串重复出现,那么str[0],str[l],str ...

  5. POJ - 3693 Maximum repetition substring(重复次数最多的连续重复子串)

    传送门:POJ - 3693   题意:给你一个字符串,求重复次数最多的连续重复子串,如果有一样的,取字典序小的字符串. 题解: 比较容易理解的部分就是枚举长度为L,然后看长度为L的字符串最多连续出现 ...

  6. <C#>找出数组中重复次数最多的数值

    给定一个int数组,里面存在重复的数值,如何找到重复次数最多的数值呢? 这是在某社区上有人提出的问题,我想到的解决方法是分组. 1.先对数组中的所有元素进行分组,那么,重复的数值肯定会被放到一组中: ...

  7. 【POJ 3693】Maximum repetition substring 重复次数最多的连续重复子串

    后缀数组的论文里的例题,论文里的题解并没有看懂,,, 求一个重复次数最多的连续重复子串,又因为要找最靠前的,所以扫的时候记录最大的重复次数为$ans$,扫完后再后从头暴力扫到尾找重复次数为$ans$的 ...

  8. spoj687 后缀数组重复次数最多的连续重复子串

    REPEATS - Repeats no tags  A string s is called an (k,l)-repeat if s is obtained by concatenating k& ...

  9. JS-取出字符串中重复次数最多的字符并输出

    /** 取出字符串中重复字数最多的字符 */ var words = 'sdfghjkfastgbyhnvdstyaujskgfdfhlaa'; //创建字符串 var word, //单个字符 le ...

随机推荐

  1. 同源策略 & 高效调试CORS实现

    # 目录 为什么有同源策略? 需要解决的问题 CORS跨域请求方案 preflight withCredentials 附:高效.优雅地调试CORS实现 ----------------------- ...

  2. 距离度量以及python实现(二)

    接上一篇:http://www.cnblogs.com/denny402/p/7027954.html 7. 夹角余弦(Cosine) 也可以叫余弦相似度. 几何中夹角余弦可用来衡量两个向量方向的差异 ...

  3. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  4. 卷积神经网络之AlexNet

    由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷 ...

  5. Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy

    爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍.发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 ht ...

  6. 如何高效的学习WEB前端

    IT 行业的变化快是众人皆知的,需要持续去学习新的知识内容.但是,往往我们工作之后,经常发现学习的东西很少了,学习效率非常低,感觉自己到了一个瓶颈期,久而久之,就演变成『一年工作经验,重复去用十年』的 ...

  7. CesiumJS 添加会动的GIF

    由于Cesium使用canvas渲染,如果使用billboard等加载gif图片只能渲染第一帧,导致动图不动.在Cesium的官方示例中找到一段代码可将HTML元素渲染到地图上,将gif以html元素 ...

  8. FPGA高速ADC接口实战——250MSPS采样率ADC9481

    一.前言 最近忙于硕士毕业设计和论文,没有太多时间编写博客,现总结下之前在某个项目中用到的一个高速ADC接口设计部分.ADC这一器件经常用于无线通信.传感.测试测量等领域.目前数字系统对高速数据采集的 ...

  9. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  10. Jmeter接口测试-断言

    JMeter接口测试-断言  对应qq群号:616961231 一个http请求发出,怎么判断执行的是否正确呢? 通过检查服务器响应数据,是否符合预期的数据, 如果是,任务成功,  如果否, 任务失败 ...