我想再增加1列,以细分客户是否已售出至少一种产品。 数据示例:
ProductID Customer Status
1 John Not sold
2 John Not Sold
3 John Sold
我的预期结果
ProductID Customer Status Sold_at_least_1
1 John Not sold Yes
2 John Not Sold Yes
3 John Sold Yes
4 Andrew Not Sold No
5 Andrew Not Sold No
6 Brandon Sold Yes
这是示例数据。很抱歉给您带来不便,因为我无法提取数据。顺便说一句,感谢您的帮助。
答案 0 :(得分:3)
您可以对在status = 'Sold'
表达式中具有case
的同一客户的记录进行窗口计数:
select
t.*,
case when sum( (status = 'Sold')::int ) over(partition by customer) >= 1
then 'Yes'
else 'No'
end
from mytable
注意:请注意,这不会神奇地创建新记录(如示例数据中所示)。此查询为您提供的结果集中的记录与表中的记录一样多,并且具有一列附加栏,用于指示表中是否每个顾客都至少有一个已售商品。
这里是a demo provided by VBokšić(谢谢)。
答案 1 :(得分:3)
另一种选择是将bool_or()
用作窗口函数。如果您可以使用boolean
列而不是使用Yes / No的varchar,那么表达式将变得更加简单:
select productid, customer, status,
bool_or(status = 'Sold') over (partition by customer) as sold_at_least_one
from mytable;