MySQL如何对同组内行进行比较并返回指定字段不匹配的行
MySQL 同分组字段差异行查询方案
核心思路
先筛选出cust分组下存在多个不同note的分组,再对这些分组的记录按cust+note去重后返回即可。
实现方案
方案1:兼容所有MySQL版本
SELECT DISTINCT cust, note FROM 替换为你的实际表名 WHERE cust IN ( SELECT cust FROM 替换为你的实际表名 GROUP BY cust HAVING COUNT(DISTINCT note) > 1 );
- 内层子查询按
cust分组,统计每个分组下不同note的数量,筛选出存在差异的cust - 外层查询过滤出符合条件的
cust对应的记录,通过DISTINCT去重,保证同一cust下相同note仅保留一条
方案2:MySQL 8.0+ 窗口函数实现(性能更优)
WITH distinct_note AS ( SELECT DISTINCT cust, note FROM 替换为你的实际表名 ), note_count AS ( SELECT cust, note, COUNT(*) OVER(PARTITION BY cust) AS cnt FROM distinct_note ) SELECT cust, note FROM note_count WHERE cnt > 1;
- 先对全表的
cust+note做去重处理 - 再通过窗口函数统计每个
cust下不同note的数量 - 最后过滤出
note数量大于1的记录即可
内容的提问来源于stack exchange,提问作者dbzone77
相关产品推荐
相关产品推荐

