我有一个表,其中每一行都是一个唯一的订单,具有唯一的order_id,但用户可以拥有多行/订单。
订单表 - > order_id,user_id,orderedat(datetime),sales
我正在尝试返回一个查询,该查询为每个order_id计算关联用户已经完成的先前订单数量。 (基本上,这一行是否代表用户的第一个订单?第五个订单?第二个订单?等等)
我正在尝试类似这种嵌套选择的方法,但是我收到错误"用作表达式的子查询返回了多行。"
SELECT
order_id,
user_id,
COUNT (order_id) AS order_n
FROM
orders
WHERE orderedat >= (
SELECT
orderedat
FROM
fulfillments
GROUP BY
order_id
)
GROUP BY
order_id
关于如何在postgres中实现这一点的任何想法?
/////////////// 进一步的复杂化:另一个名为" Status,"如何只计算状态中具有特定值的行?我想跳过号码中的订单,除非他们的状态为“已付款”#34;或者"放置"。例如:
data:
order_id user_id orderedat status
001 max 10/1/14 paid
002 max 10/20/14 placed
003 max 10/21/14 cancelled
004 bill 10/5/14 deleted
005 max 10/31/14 paid
006 bill 10/24/14 placed
results:
order_id user_id orderedat orders_so_far
001 max 10/1/14 1
002 max 10/20/14 2
003 max 10/21/14 null
005 max 10/31/14 3
004 bill 10/5/14 null
006 bill 10/24/14 1
答案 0 :(得分:4)
这可以使用窗口函数来完成:
SELECT order_id,
user_id,
orderdat,
row_number() over (partition by user_id order by orderedat ) as orders_so_far
FROM orders
order by user_id, orderdat