筛选存在不同ODO值的重复VIN的MySQL查询实现咨询
匹配同VIN下存在不同ODO值的MySQL查询方案
原SQL的局限性:
现有语句SELECT vin FROM cars GROUP BY vin HAVING COUNT(*) > 1 ORDER BY vin 仅能筛选出重复出现的VIN,无法区分同VIN下的ODO是否存在取值差异。比如示例数据中的VIN 555虽然累计出现2次,但两次对应的ODO均为333,实际不符合“存在不同ODO取值”的业务要求。
实现思路
按VIN维度完成分组后,统计该VIN下的不重复ODO值数量,若统计值大于1,即可判定该VIN存在不同的ODO记录。
正确查询语句
SELECT vin FROM cars GROUP BY vin HAVING COUNT(DISTINCT ODO) > 1 ORDER BY vin;
示例数据校验
对照给出的cars表数据逐组验证:
- VIN 666对应的ODO取值包含12、13、111,去重后计数为3,满足筛选条件
- VIN 111对应的ODO取值包含11、12,去重后计数为2,满足筛选条件
- VIN 555对应的ODO取值仅为333,去重后计数为1,不满足条件
- VIN 333仅单条记录,对应ODO取值仅为122,去重后计数为1,不满足条件
最终查询返回的结果为VIN 111、666,完全匹配业务预期。
内容的提问来源于stack exchange,提问作者user2511777
相关产品推荐
相关产品推荐

