2016-10-21 12 views
1

を見つけるために参加し、私持っている私はこのようになりますどの照会しようとしていますテーブル:は重複

t_documents 
id 
user_id 
submitted_date 
text 
status 

ユーザーがドキュメントテーブルで複数のドキュメントを持っているし、提出して自由であることができます同じテキストを複数回私は、1人のユーザーに重複した投稿がいくつあるかを確認する方法が必要でした。だから、元のために:

VALUES (1, 1234, 2016-07-05, "this is a test", 3) 
VALUES (2, 1234, 2016-07-06, "this is a test", 3) 
VALUES (3, 5678, 2016-07-07, "this is another test", 3) 
VALUES (4, 5678, 2016-07-08, "this is another test", 3) 

データの上記セットの場合、私は私のユーザー1234のレコード、重複したテキストと重複するテキストが送信された回数を与えると言う結果を望んでいました。私は以下を試しました:

select oring.user_id, orig.text, COUNT(1) as dups 
from t_documents orig 
join t_documents another 
on orig.user_id = another.user_id 
and orig.text = another.text 
group by user_id 

上記は非常に粗いもので、動作しません。誰も私が欲しいものをする方法をアドバイスできますか?私が興味を持っているもう一つの質問は、全部で何人の重複したエントリがそこにあるのでしょうか?

+0

無関係の、しかし。カラム名にそれを使うべきではありません –

答えて

2

ここで自己結合が必要かどうかはわかりません。ユーザーIDとテキスト列上の簡単なGROUP BY十分です:

SELECT user_id, COUNT(*) AS dup_count 
FROM t_documents 
GROUP BY user_id, text 

私は、テキストが重複かあるかどうかを判断するときに、転記日付についてないケアを行うことをここを前提としています。

編集:

あなたはすべてのユーザー間での重複数の合計を検索したい場合は、あなたが次のクエリを試すことができます: `text`がキーワードです:

SELECT SUM(t.dup_count) 
FROM 
(
    SELECT user_id, COUNT(*) - COUNT(DISTINCT text) AS dup_count 
    FROM t_documents 
    GROUP BY user_id 
) t 
+0

テキストはGROUP BY句に現われなければならないか、集約関数で使われなければなりません –

+0

'text'_does_は' GROUP BY'節に現れます。あなたは私のクエリを実行していて、他の何かを実行していませんか? –

+0

私の他のクエリはどうですか?すべてのユーザーに重複するエントリの数を取得しますか?だから、ユーザーごとにdupsを見つけるのではなく、ドキュメントテーブル自体にdupを入れないようにするのですか? –