我试图获得表中具有重复项的所有行的总数。
以下是我现在使用的查询:
SELECT count( `id_lead` )
FROM `lead_history`
GROUP BY `id_lead`
HAVING count( * ) > 1
问题在于,这不计算总行数,而是计算每行包含重复项并返回该行的总次数。
现在,它正在回归:
2
4
6
2
鉴于这些结果,我实际上希望我的查询返回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)
你几乎就在那里,只需将查询放在派生表中,然后从中选择计数。无需额外in
或join
:
select count(*) from (
select `id_lead`
from `lead_history`
group by `id_lead`
having count(*) > 1
) t