我有一个包含 id、C1、C2 和 C3 列的表 T1。我正在使用以下查询查找重复记录
Select group_concat(id) from T1 group by C2 having count(id) >1;
现在我想按 C3 列对所有重复记录进行分组。我该怎么做? 注意:我没想到
Select group_concat(id) from T1 group by C2,C3 having count(id) >1;
我想获取所有在 C2 上具有重复值的记录,并仅根据 C3 对它们进行分组,而不管它们的 C2 值如何
id C1 C2 C3
1 a 3 A
2 b 2 A
3 c 2 A
4 d 2 B
5 e 3 C
在上面的数据中,1,5 是 C2 值为 3 的重复记录,2,3,4 是 C2 值为 2 的重复记录。我想要一个输出
A - has 2 duplicates (with C2 values 2 and 3 )
B - has 1 duplicate (with C2 value 2)
C - has 1 duplicate (with C2 value 3)
最佳答案
- 在派生表中,我们可以在
C2
上GROUP BY
并确定它们的计数。C2
计数大于 1 的值基本上是重复的(出现在不止一行中)。 - 将此结果集连接到
C2
上的主表。这将帮助我们获得一个额外的列,显示每一行的C2
计数。 - 现在,我们可以使用
COUNT(DISTINCT ...)
在C3
上使用条件聚合,考虑计数大于 1 的情况。
尝试:
SELECT
t.C3,
COUNT(DISTINCT IF(dt.count_C2 > 1, t.C2, NULL)) AS duplicates
FROM
your_table AS t
JOIN
(
SELECT
C2,
COUNT(id) AS count_C2
FROM your_table
GROUP BY C2
) AS dt
ON dt.C2 = t.C2
GROUP BY t.C3
结果
| C3 | duplicates |
| --- | ---------- |
| A | 2 |
| B | 1 |
| C | 1 |
关于mysql查询用不同的字段对重复记录进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258136/