多组数据一致性校验需求:判断同Item下各组值是否一致
实现方案:验证分组数据一致性
核心验证规则
需同时满足以下两个条件才返回1,否则返回0:
- 每个
Item对应的User_id必须包含且仅包含1、2、3三个值(无缺失、无重复) - 同一个
Item下所有User_id的Remark值完全一致
方案1:SQL实现
假设数据存储在表item_remarks中,以下SQL语句可直接返回验证结果:
SELECT CASE WHEN EXISTS ( -- 检查是否存在不符合要求的Item SELECT 1 FROM item_remarks GROUP BY Item HAVING -- 验证User_id恰好是1、2、3(去重后计数为3,且最小/最大值匹配) (COUNT(DISTINCT User_id) != 3 OR MIN(User_id) != 1 OR MAX(User_id) != 3) OR -- 验证同一Item下Remark值唯一 COUNT(DISTINCT Remark) != 1 ) THEN 0 ELSE 1 END AS validation_result;
逻辑说明:
- 按
Item分组后,先校验用户ID:去重后数量必须为3,且最小ID是1、最大ID是3,确保刚好覆盖1、2、3三个用户(避免重复或缺失) - 同时校验同一Item下的
Remark去重后数量是否为1,保证所有用户的备注完全一致 - 只要有任意一个Item不满足上述任一条件,就返回0;所有Item都符合要求则返回1
方案2:Python(Pandas)实现
如果数据以DataFrame形式存在,用Pandas可快速完成验证:
import pandas as pd def validate_data(df): # 按Item分组,统计关键指标 group_stats = df.groupby('Item').agg( user_unique_count=('User_id', 'nunique'), min_user_id=('User_id', 'min'), max_user_id=('User_id', 'max'), remark_unique_count=('Remark', 'nunique') ) # 检查所有分组是否满足全部条件 is_valid = ( (group_stats['user_unique_count'] == 3) & (group_stats['min_user_id'] == 1) & (group_stats['max_user_id'] == 3) & (group_stats['remark_unique_count'] == 1) ).all() return 1 if is_valid else 0 # 示例调用(替换df为你的数据对象) # result = validate_data(df)
逻辑说明:
- 对每个
Item分组,统计用户ID去重数量、用户ID的最小/最大值、Remark去重数量 - 验证所有分组是否同时满足用户数为3、用户ID覆盖1-3、Remark唯一三个条件
- 全部符合返回1,否则返回0
对应示例的验证结果
- 示例1:所有Item的用户数都是3,且Remark一致,返回1
- 示例2:AM180仅2个用户、AM182仅1个用户,不满足用户数要求,返回0
- 示例3:多个Item的Remark存在不同值,不满足备注一致要求,返回0
内容的提问来源于stack exchange,提问作者Douda
相关产品推荐
相关产品推荐

