2012-03-29 9 views
2

Betrachten Sie das folgende „Tweets“ TabelleWie kann die Anzahl der doppelten Datensätze in einer Datenbank gezählt werden?

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 

Für jeden Benutzer ich die Anzahl der doppelten Tweets zählen möge. Im obigen Beispiel hat user_id 1 insgesamt 5 Tweets, von denen 2 eindeutig sind (tweet_id 3 und 5) und 3 doppelt vorhanden sind (1, 2 und 4). Daher sollte das Ergebnis der Abfrage für Benutzer 1 "3" sein.

[EDIT] Blick auf user_id 1. Der Tweet "schau auf meinen Tweet" erscheint 3 mal, der Tweet "Hallo" 2 mal. Die Gesamtzahl der doppelte Tweets ist dann 3 + 2 = 5.

+0

Ich kann sagen, dass jede der besten Lösung wird sehr langsam sein – safarov

+0

Mögliche Duplikat von [Suchen doppelte Werte in einer SQL-Tabelle] (https://stackoverflow.com/questions/ 2594829/finding-duplicate-values-in-a-sql-tabelle) – tkruse

Antwort

3

Zum ersten müssen Teil können Sie die folgende Abfrage verwenden

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 

Die innere Abfrage findet alle Benutzer und Tweets, die o haben mehrfach bestätigt. Die äußere Abfrage addiert die doppelten Werte für jeden Benutzer

+0

Könnten Sie bitte Ihre Anfrage erklären? Wenn ich diese Abfrage für Benutzer 25 (ein Spam-Konto) ausführen, gibt es 39.740 zurück; während die Abfrage von Apurv Gupta für denselben Benutzer 36.577 zurückgibt. Ich möchte herausfinden, warum, durch den Vergleich der beiden Abfragen. Ich frage ihn die gleiche Frage :) – Pr0no

+0

@Reveller Fertig. Ich habe meine Antwort bearbeitet –

1

Try this:

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

Können Sie bitte Ihre Anfrage erläutern? Wenn ich diese Abfrage für Benutzer 25 (ein Spam-Konto) ausführen, gibt es 36,577 zurück; während Amit Bhargavas Abfrage 39,740 für denselben Benutzer zurückgibt. Ich würde gerne herausfinden, warum :) – Pr0no

+0

Eigentlich berechnet meine Abfrage die Anzahl der Duplikate, so wird meine Abfrage zählen "Schau auf meinen Tweet" als "eine" legitimer Eintrag und zwei andere werden als Duplikate gezählt werden, während Amits Abfrage berechnet Anzahl von Texte, die mehr als einmal erschienen sind. Meine Abfrage wäre jedoch sehr schnell. :) –

+0

count (text) gibt 7 zurück und count (distinct text) gibt 4 zurück, so dass die Ausgabe hier 3 ist. Aber die erwartete Ausgabe wie OP ist 5. Kannst du bitte diese Abfrage erklären – Jayy

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

Sie dann eine serverseitige Funktion Gruppe von User_id

+0

Bitte erläutern Sie, was Sie mit einer "serverseitigen Funktion" zur Gruppierung nach user_id meinen. Warum sollte "GROUP BY user_id" hier nicht hilfreich sein? – Pr0no

+0

Welche Sprache verwenden Sie für den Code? – Straseus

+0

Ich verstehe nicht. Ich benutze SQL. Ich könnte die Abfrage innerhalb von PHP aufrufen, wenn die Ausgabe etwas Verarbeitung benötigt, aber ich hatte gehofft, alles mit einer Abfrage zu tun, da es viel schneller imho funktioniert. – Pr0no