2016-04-13 13 views
1

重複しているテーブル内のすべての行の合計数を取得しようとしています。ここで重複している行の総数

は、私が今使っているクエリです:

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

問題は、これが行の合計数をカウントしていないということです、それは時間の総量をカウントされ、各行は、重複が含まれており、それを返す。

だから今、それは次のように返している:重複を持っている4行があるので、

2 
4 
6 
2 

それらの結果を考えると、私は実際に、私のクエリは4を返すようにしたいです。各行の複製の量は問題ではありません。

サブクエリを使用せずにこのクエリを書くにはどうすればよいですか?

+0

'GROUP BY'または' DISTINCT'のいずれかを使用すると、チームメイトを助けることはできません – Avidos

答えて

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) 

サブクエリは相関関係がないので、クエリオプティマイザはこれを合理的に効率的に実行できる必要があります。

0

は、あなただけの派生テーブルでクエリを入れて、それからの数を選択し、ほとんどそこにいるこの

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

を試してみてください。追加のinjoin必要:

select count(*) from (
    select `id_lead` 
    from `lead_history` 
    group by `id_lead` 
    having count(*) > 1 
) t 
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 
関連する問題