row_number() over() 一句话概括,以及max()函数的一种查询分组中最大值的用法

row_number() over(partition by col1 order by col2) 根据COL1分组可能会有多个组,每组组内根据COL2进行排序。每组内都有自动生成的序号,从1开始,有多少个分组就有多少个从1开始的序号

SELECT

    ROW_NUMBER() OVER(PARTITION BY table.XX ORDER BY age DESC) rn,  table .*

FROM table

WHERE condition = ''

上面是分组后组内所有条数都显示,组内按从大到小排序

下面是每组只显示一条数据,是各组中最大的,但是不能把所有信息都显示,只能显示max和group by 的字段

select 

max(age), table.XX

from table

where  condition = ''  group by table.XX

显示所有字段,将上面的sql去掉group by分组并外面加一层查询。这个方法没有使用row_number()的效率高,因为包含了两次查询操作

select * from table

where age=(

select 

max(age), table.XX

from table

where  condition = ''  group by table.XX

 )

posted @ 2017-09-26 19:23  弓长张&木子李  阅读(1189)  评论(0编辑  收藏  举报