2

mysql データベース内の重複するメールの数をカウントする必要がありますが、最初のメール (オリジナルと見なされる) はカウントしません。このテーブルでは、クエリの結果は単一の値「3」になります (2 つの重複 x@q.com と 1 つの重複 f@q.com)。

テーブル

ID | Name  | Email
1  | Mike  | x@q.com
2  | Peter | p@q.com
3  | Mike  | x@q.com
4  | Mike  | x@q.com
5  | Frank | f@q.com
6  | Jim   | f@q.com

私の現在のクエリは、1 つの数字ではなく複数の行を生成します。テーブル内にこの電子メールの重複がいくつあるかに関係なく、電子メール アドレスごとに 1 行です。

SELECT value, count(lds1.leadid) FROM leads_form_element lds1 LEFT JOIN leads lds2 ON lds1.leadID = lds2.leadID 
     WHERE lds2.typesID = "31" AND lds1.formElementID = '97'  
     GROUP BY lds1.value HAVING ( COUNT(lds1.value) > 1 )
4

2 に答える 2

2

これは1つのクエリではないため、この場合に機能するかどうかはわかりませんが、1つのクエリを実行して行の総数を選択し、2番目のクエリを実行して個別のメールアドレスを選択し、2つを差し引くことができます。これにより、重複の総数がわかります...

select count(*) from someTable;
select count(distinct Email) from someTable;

実際、これが機能するかどうかはわかりませんが、すべてを1つのクエリで実行してみることができます。

select (count(*)-(count(distinct Email))) from someTable

私が言ったように、テストされていませんが、それがあなたのために働くかどうか私に知らせてください。

于 2012-07-13T22:21:16.863 に答える
1

サブクエリで group by を実行してから合計してみてください。何かのようなもの:

select sum(tot)
from
(
    select email, count(1)-1 as tot
    from table
    group by email
    having count(1) > 1
)
于 2012-07-13T22:29:13.163 に答える