PostgreSQL中的row_number() 与distinct用法说明

一、示例

这两个SQL执行所得到的数据是一样的!

select count(s.*)

from (
 select *, row_number() over (partition by fee_date order by fee_date) as gr
 from new_order where news_id='novel' and order_status='2'
) s
where s.gr = 1

解释:

ROW_NUMBER()为返回的记录定义个行编号, PARTITION BY fee_date是根据fee_date分组,ORDER BY fee_date是根据fee_date进行排序。

 
SELECT count(DISTINCT fee_date) as dis from new_order where news_id='novel' and order_status='2'

二、sql执行顺序

from语句->where语句->group by语句->having语句->order by语句->select 语句

三、row_number()分析函数

说明:返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

语法:ROW_NUMBER () OVER ([ <partition_by_clause>]<order_by_clause> )

备注:ORDERBY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

参数:<partition_by_clause> :将FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。

<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中行的顺序。

返回类型:bigint 。

row_number()从1开始,为每一条分组记录返回一个数字

 

posted @ 2022-04-26 09:01  数据库集中营  阅读(459)  评论(0编辑  收藏  举报