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 ([ ] )

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

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

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

返回类型:bigint 。

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