gpt4 book ai didi

sql - 返回 postgresql 中的行数

转载 作者:行者123 更新时间:2023-11-29 13:11:26 25 4
gpt4 key购买 nike

我有一个存储订单行 (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()(在第一个查询中)最适合将结果分配给整个表。只有当您选择一行或少量行时,相关子查询才会有更好的性能。

关于sql - 返回 postgresql 中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54114263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com