具有重复项的总行数

时间:2016-04-13 04:44:18

标签: mysql count duplicates

我试图获得表中具有重复项的所有行的总数。

以下是我现在使用的查询:

SELECT count( `id_lead` )
FROM `lead_history`
GROUP BY `id_lead`
HAVING count( * ) > 1

问题在于,这不计算总行数,而是计算每行包含重复项并返回该行的总次数。

现在,它正在回归:

2
4
6
2

鉴于这些结果,我实际上希望我的查询返回4,因为有4行有重复。每行的重复数量对我来说无关紧要。

如何在不使用子查询的情况下编写此查询?

4 个答案:

答案 0 :(得分:0)

如果您使用的是Oracle或SQL Server,则可以利用分析功能。但MySQL没有这些,所以使用子查询可能是获得答案的最佳方式。

SELECT COUNT(*)
FROM `lead_history`
WHERE `id_lead` IN (SELECT `id_lead` FROM `lead_history` GROUP BY `id_lead` HAVING COUNT(*) > 1)

请注意,子查询不是相关的,因此查询优化器应该能够合理有效地运行。

答案 1 :(得分:0)

试试这种方式

SELECT COUNT(*)
FROM `lead_history` as b
join (SELECT `id_lead` FROM `lead_history` GROUP BY `id_lead` HAVING COUNT(*) > 1) a on b.id_lead=a.id_lead

答案 2 :(得分:0)

试试这个

SELECT count( * )
FROM `lead_history`
GROUP BY `id_lead`
HAVING count( * ) > 1

答案 3 :(得分:0)

你几乎就在那里,只需将查询放在派生表中,然后从中选择计数。无需额外injoin

select count(*) from (
    select `id_lead`
    from `lead_history`
    group by `id_lead`
    having count(*) > 1
) t