如何编写ClickHouse SQL检测同类别商品价格一致性?
数据异常检测需求与ClickHouse实现
数据示例

规则说明
- 第4、5行的C列值相同,且D列值也相同(符合要求)
- 第6、7行的C列值相同,但D列值不同(不符合要求)
核心规则:
所有由A列和B列组成的唯一组合,若C列值相同,则D列值必须一致。换句话说,A列和B列共同定义一个商品,同一类别(C列)下的所有商品必须拥有相同的价格(D列),同类别商品价格不同则判定为异常。
需求详情
有4列数据,A列和B列构成唯一键。需要验证所有属于同一C列值的唯一键对应的D列值是否一致。即:由A列和B列的唯一组合定义的所有商品,若属于同一类别(C列),则价格(D列)必须相同。
ClickHouse SQL实现
方法1:查询所有违规记录
该语句会列出所有属于存在价格不一致类别的商品记录:
WITH category_price_check AS ( SELECT C, COUNT(DISTINCT D) AS distinct_price_count FROM your_table_name GROUP BY C HAVING distinct_price_count > 1 ) SELECT t.A, t.B, t.C, t.D FROM your_table_name t JOIN category_price_check c ON t.C = c.C ORDER BY t.C, t.D;
方法2:快速判断是否存在异常
该语句直接返回结果,1表示存在价格异常,0表示无异常:
SELECT CASE WHEN EXISTS ( SELECT 1 FROM your_table_name GROUP BY C HAVING COUNT(DISTINCT D) > 1 ) THEN 1 ELSE 0 END AS has_price_anomaly;
内容的提问来源于stack exchange,提问作者user3585510
相关产品推荐
相关产品推荐

