返回 postgresql 中的行号



我有一个存储订单行(salesrow_id)的地方,所以发票的一行,这是订单的一部分order_id和为该项目支付的价格

salesrow_id(pk) | order_id | price | name
10                1           5      spaghetti
11                1           4      pizza
12                2           6      salami
13                1           1      vegetables

我试图实现的是按order_id和salesrow_id获取发票上的行号。例如:salesrow_id=13,order_id=1 应返回 3,因为如果按salesrow_id排序,它是订单 1 发票上的第三项。

我尝试使用 row_number 进行查询,但这仅在我返回多行时才有效,并且我只想将数字 3 作为单个结果。

有人能把我推向正确的方向吗?

您正在寻找row_number(),我认为:

select t.*,
       row_number() over (partition by order_id order by sales_row_id) as rownumber
from t;

如果您希望对单行执行此操作,请使用子查询和筛选器:

select t.*
from (select t.*,
             row_number() over (partition by order_id order by sales_row_id) as rownumber
      from t
     ) t
where sales_row_id = 13;

如果您关心性能,相关子查询可能会更好:

select t.*,
       (select count(*)
        from t t2
        where t2.order_id = t.order_id and t2.sales_row_id <= t.sales_row_id
       ) as rownum
from t
where t.sales_row_id = 13;

请注意,row_number()(在第一个查询中)最适合将结果分配给整个表。 仅当您选择一行或少量行时,相关子查询才会具有更好的性能。

最新更新