使用 SQL 或 Spark-SQL - 如何根据大于 1 的聚合记录数更新列值

问题描述 投票:0回答:1

我有一个涉及客户选择退出促销的数据集。他们将始终拥有唯一的 customer_id,但可以共享居住空间。当同一家庭的两个客户在同一天采用不同的促销操作方法(添加、删除、NULL)时,就会出现问题。

当多个家庭成员在同一 promo_action_date 上出现不同的 promo_action 值时,就会出现问题。如果一名家庭成员选择删除,我们需要确保所有家庭成员都被视为促销的删除对象。如果是这种情况,如果有多个记录共享相同的 family_id 和 promo_action_date,但 promo_action 的值不同,如何更新 promo_action 列?如果是这种情况,则要求将 promo_action_date 更新为“DELETE”。

promo_action_household 表有 4 列,如标题所示。

之前

customer_id|household_id|promo_action|promo_action_date

101|54|删除|2024-10-03

157|54|NULL|2024-10-03

之后

customer_id|household_id|promo_action|promo_action_date

101|54|删除|2024-10-03

157|54|删除|2024-10-03

如果查询 promo_action_household 表满足此条件,我希望将记录的列更新为“DELETE”。 SQL 或 Spark-sql 是这里使用的目标工具。

从 promo_action_household 组中选择 family_id、promo_action_date、count(),按 family_id、promo_action_date 的 count()>1

python sql apache-spark-sql
1个回答
0
投票

--更新 promo_action_household 以设置家庭的所有成员 如果任何家庭成员已经有 promo_action='DELETE',则 promo_action='DELETE'。

UPDATE promo_action_household SET promo_action='DELETE' 
WHERE household_id in
(SELECT household_id FROM promo_action_household  WHERE promo_action='DELETE' )
AND promo_action!='DELETE' 
© www.soinside.com 2019 - 2024. All rights reserved.