2012-03-29 12 views
2

は、各ユーザのために、以下の「ツイート」テーブルデータベース内の重複レコードの数をカウントするにはどうすればよいですか?

tweet_id user_id text 
----------------------------------------- 
1   1  look at my tweet 
2   1  look at my tweet 
3   1  a very different tweet 
4   1  look at my tweet 
5   1  look at my tweets 
6   2  a cool tweet 
7   2  this is my tweet 
8   1  hello 
9   1  hello 

を考えてみましょう、私は重複つぶやきの数をカウントします。上記の例では、user_id 1に合計5つのつぶやきがあり、そのうち2つは一意で(tweet_id 3と5)、3つは重複しています(1,2,4)。したがって、ユーザー1の問合せの結果は「3」になります。

[編集] user_idを見てください。1.ツイート「my tweetを見てください」が3回、「hello」が2回現れます。あなたが最初のためのuser_id

+0

最良のソリューションはどれも非常に遅いと言えます。 – safarov

+0

[SQLテーブルの重複する値を見つける](https://stackoverflow.com/questions/) 2594829/finding-duplicate-values-in-a-sql-table) – tkruse

答えて

3

によってグループにサーバー側の機能が必要になります

Select count(text)-count(distinct text) from tweets where user_id=1 
+0

あなたの質問を説明していただけますか?ユーザー25(スパムアカウント)に対してこのクエリを実行すると、39,740が返されます。 Apurv Guptaのクエリは同じユーザーに対して36,577を返します。私は2つのクエリを比較する理由を理解したいと思います。私は彼に同じ質問をしています:) – Pr0no

+0

@Reveller Done。私は私の答えを編集しました –

1

3 + 2 = 5です。次のクエリを使用することができます

select user_id, sum(count) 
from 
(
select user_id, text, count(tweet_id) count 
from tweets 
group by 
user_id, text 
having count(tweet_id) > 1 
) t 
group by user_id 

内部クエリは、複数回硬化した。外部クエリによって各ユーザーの重複値が加算されます

+0

クエリを説明してください。ユーザー25(スパムアカウント)に対してこのクエリを実行すると、36,577が返されます。 Amit Bhargavaのクエリは同じユーザーに対して39,740を返します。私は理由を理解したいと思います:) – Pr0no

+0

実際には私のクエリは重複の数を計算するので、私のクエリは「1つの」正当なエントリと見なし、2つのものは重複としてカウントされます。複数回出現したテキスト。私のクエリは非常に高速です。 :) –

+0

count(text)は7を返し、count(distinct text)は4を返して出力は3になります。しかし、OPごとの期待される出力は5です。 – Jayy

0
select count(*) as count, text from table group by text order by user_id desc; 

:重複したツイートの総数はこれを試してみてください、その後

+0

user_idでグループ化する「サーバー側機能」の意味を説明してください。なぜ "GROUP BY user_id"はここでは成功しないのですか? – Pr0no

+0

コードにはどのような言語を使用していますか? – Straseus

+0

私は分かりません。私はSQLを使用しています。出力に何らかの処理が必要な場合はPHP内からクエリを呼び出すことができましたが、より速くimhoを処理するので、1つのクエリですべて処理することを望んでいました。 – Pr0no

関連する問題